********************************

   .Aa_gbf_dot_com_simulation

********************************

 

Authors: Rogelio Oliva, John Sterman and Martin Giese Version of 12/2002 This model represents the competition among dot.com retailers. The model accompanies and is described in Oliva, R., J. Sterman and M. Giese (forthcoming) "Limits to Growth in the New Economy: An Exploration of the ‘Get Big Fast’ Strategy in e-commerce," System Dynamics Review. See <http://www.people.hbs.edu/roliva/research/dotcom>

 

company : COMPANY1,COMPANY2,COMPANY3

The model tracks three competing companies.

 

department : ENGIN,CUSTSUPPORT

The model keeps track of two different groups of employees - engineering and customer support. Engineering comprises all management and programming and site maintenance personnel. Customer support comprises both the people dealing with fulfillment as well as with customer service.

 

********************************

   .Control

********************************

 

Simulation Control Parameters

 

FINAL_TIME = 2010

Units: Year

The final time for the simulation.

 

INITIAL_TIME = 1995

Units: Year

The initial time for the simulation.

Uses:

Time - Internally defined simulation time.

 

saveper = TIME_STEP

Units: Year

The frequency with which output is stored.

 

TIME_STEP = 0.03125

Units: Year

The time step for the simulation.

Uses:

annualized_quarterly_cogs - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_general_and_administrative_expense - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_gross_margin - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_marketing_and_sales - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_net_income - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_operating_expenses - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_operating_income - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_product_development - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_revenue - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

brand_equity_at_beginning_of_operations - New entrants can begin operations with a certain initial quantity of brand equity. This flow ensures that the initial brand equity (for example the brand equity derived from an existing bricks-and-mortar operation) is only taken into account after the company begins its online operations.

initial_funding - The initial funding represents the amount of cash made available to the company at its start date.

initial_investment_in_server_infrastructure - At startup the firm acquires a certain initial server infrastructure.

ipo_shares - The shares issued at the IPO date. The entire value of the IPO is issues in one time step.

maximum_carry_forward_loss_applicable_to_current_tax_liability - The maximum rate the firm can draw down its prior losses to offset current tax liabilities. The time constant is assumed to be very short, so is set to the simulation time step, allowing the entire carry forward loss to be used in one time step if needed.

minimum_cash_disbursement_time - The firm can pay out all its remaining cash in one time step (that is, the actual disbursement time is very small relative to the time step).

minimum_fulfillment_time - The minimum time required to fill an order. Set to the maximum of the reference value or the simulation time step to prevent integration error.

saveper - The frequency with which output is stored.

warehouse_space_added_at_start_of_operations - The Initial Warehouse Space for each firm is added when the firm commences operations.

 

********************************

   .Data_amazon

********************************

 

AMAZON_stock_price

Units: $/share

Amazon.com stock prices, monthly. From yahoo.com. Adjusted for splits.

Uses:

amzn_market_capitalization - Market capitalization for Amazon is the number of shares outstanding multiplied by the share price.

 

AMZN_accounts_payable

Units: $

Amazon.com Accounts Payable. From 10q and 10k Balance Sheets.

 

AMZN_assets

Units: $

Amazon.com assets w/o including goodwill for side investments. From 10q and 10k Balance Sheets.

 

AMZN_cash

Units: $

Amazon.com Cash and Marketable securities. From 10q and 10k Balance Sheets.

 

AMZN_cost_of_sales

Units: $/Year

Amazon.com cost of sales. From 10q and 10k Consolidated Statements of Operations.

 

AMZN_gen_and_admin

Units: $/Year

Amazon.com General and Administrative expenses. From 10q and 10k Consolidated Statements of Operations.

 

AMZN_gross_profit

Units: $/Year

Amazon.com gross profit. From 10q and 10k Consolidated Statements of Operations.

 

AMZN_inventory

Units: $

Amazon.com Inventory. From 10q and 10k Balance Sheets.

 

amzn_market_capitalization = AMAZON_stock_price * AMZN_shares_outstanding

Units: $

Market capitalization for Amazon is the number of shares outstanding multiplied by the share price.

 

AMZN_marketing_and_sales

Units: $/Year

Amazon.com marketing and sales (fulfillment). From 10q and 10k Consolidated Statements of Operations.

 

AMZN_net_income

Units: $/Year

Amazon.com net Income. From 10q and 10k Consolidated Statements of Operations.

Uses:

recent_net_income_wdata - Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

 

AMZN_net_sales

Units: $/Year

Amazon.com net sales. From 10q and 10k Consolidated Statements of Operations.

Uses:

recent_sales_revenue_wdata - Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

 

AMZN_new_customers

Units: People/Year

Source: Amazon.com web site, converted. From quarterly data to annual rates (x4).

 

AMZN_operating_expense

Units: $/Year

Amazon.com modified Operating Expense. From 10q and 10k Consolidated Statements of Operations. This series does not include the amortization of goodwill nor other accounting considerations.

 

AMZN_operating_profit

Units: $/Year

Amazon.com Operating Profit based on Gross Profit minus the Operating Expenses (not including goodwill and other items).

 

AMZN_product_development

Units: $/Year

Amazon.com Product Development expenditures from 10q and 10k Consolidated Statements of Operations. Later in the financial statement this series was modified to the label "Technology and Content"

 

AMZN_shareholders_equity

Units: $

Amazon.com Shareholders Equity. From 10q and 10k Balance Sheets.

 

AMZN_shares_outstanding

Units: shares

Shares outstanding, Amazon.com. Source: 2001 10K

Uses:

amzn_market_capitalization - Market capitalization for Amazon is the number of shares outstanding multiplied by the share price.

 

AMZN_total_active_customers

Units: People

Source: Amazon.com web site, converted from quarterly data to annual rates (x4).

 

AMZN_total_operating_expense

Units: $/Year

Amazon.com Total Operating Expense. From 10q and 10k Consolidated Statements of Operations.

 

AMZN_total_operating_profit

Units: $/Year

Amazon.com Operating Profit. From 10q and 10k Consolidated Statements of Operations.

 

********************************

   .Financial_accounting

********************************

 

Accounts_Payable[company] = INTEG(increase_in_accounts_payable[company] - payment_of_accounts_payable[company], 0)

Units: $

This stock keeps track of accounts payable. In this model, accounts payable are paid consistently based on the normal payment time. There is no liquidity management.

Uses:

current_liabilities - The current liabilities are equal to the account payable as the model does not include long term debt.

required_payments - The firm seeks to pay accounts payable in the normal payment time.

 

acquisition_costs_per_customer[company] = ZIDZ(total_marketing_spending[company], new_loyal_users[company])

Units: $/person

The cost of each new loyal customer acquired is the ratio of total marketing spending to the rate at which the firm acquires new loyal customers.

 

adjustment_to_financing_for_cash[company] = (target_cash_on_hand[company] - Cash[company]) /TIME_TO_ADJUST_CASH

Units: $/Year

The firm seeks to adjust its cash balance to the target level of the Time to Adjust Cash.

Uses:

financing_required - The financing the firm requires is (nonnegative part of) the amount needed to adjust the cash balance to the target level less the firm's cash flow before financing. Note that we do not model the possibility of share buybacks (financing required is constrained to be nonnegative).

 

annualized_quarterly_cogs[company] = ANNUALIZED_Q_DATA(cost_of_goods_sold[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_general_and_administrative_expense[company] = ANNUALIZED_Q_DATA(general_and_administrative_expense[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_gross_margin[company] = ANNUALIZED_Q_DATA(gross_margin[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_marketing_and_sales[company] = ANNUALIZED_Q_DATA(marketing_and_sales[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_net_income[company] = ANNUALIZED_Q_DATA(net_income[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_operating_expenses[company] = ANNUALIZED_Q_DATA(operating_expenses[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_operating_income[company] = ANNUALIZED_Q_DATA(operating_income[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_product_development[company] = ANNUALIZED_Q_DATA(product_development[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

annualized_quarterly_revenue[company] = ANNUALIZED_Q_DATA(sales_revenue[company], switch_to_flush_quarterly_accumulators, TIME_STEP)

Units: $/Year

Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

AVERAGE_LOSS_CARRY_FORWARD_PERIOD = 5

Units: years

The average carry forward period for losses.

Uses:

expiration_of_unused_carry_forward_losses - Carry forward losses expire after a specified time.

 

balance_sheet_error[company] = ZIDZ((total_assets[company] - total_liabilities_and_equity[company]) , total_assets[company])

Units: dimensionless

This is a control variable that tests the basic accounting rule that Total assets must equal total liabilities plus equity. Returns the error as a fraction of total assets. Zero if assets are zero.

 

bankruptcy_switch[company] = IF_THEN_ELSE(Cash[company]>0, 0, 1)

Units: dimensionless

Switch indicated whether the firm is bankrupt. 1 if solvent, 0 if cash is zero.

 

carry_forward_loss[company] = MAX(0, - taxable_income[company])

Units: $/Year

The firm can accumulate losses and use them to offset future profits in calculating taxable income.

Uses:

Cumulative_Carry_Forward_Losses - The firm's cumulative losses carried forward to offset potential future profit; increased by the net loss, decreases as the carry forward is used or expires.

 

carry_forward_loss_applied_to_current_tax_liability[company] = MIN(maximum_carry_forward_loss_applicable_to_current_tax_liability[company], MAX(0, taxable_income[company]) )

Units: $/Year

The carry forward loss applied to offset current taxable income is the lesser of current taxable income or the total carry forward credit available.

Uses:

decrease_in_carry_forward_losses - Carry forward losses can be used or expire.

taxable_income_after_carry_forward_losses - Taxable income after carry forward losses are applied. Carry forward losses reduce taxable income.

 

Cash[company] = INTEG(cash_in[company] - cash_out[company] + initial_funding[company], 0)

Units: $

This stock tracks the amount of cash currently held by the company.

Uses:

adjustment_to_financing_for_cash - The firm seeks to adjust its cash balance to the target level of the Time to Adjust Cash.

bankruptcy_switch - Switch indicated whether the firm is bankrupt. 1 if solvent, 0 if cash is zero.

breakup_value - The minimum value of the firm is its breakup or liquidation value, given by its cash, plus a fraction of its nonliquid assets, less its liabilities. The Salvage Value Ratio is typically < 1 because the firm will realize less than book value for its assets if forced to liquidate them. Breakup value is not less than zero.

maximum_payments_from_cash_on_hand - The maximum rate at which the firm will make payments, based on the cash balance and the fastest time period over which the firm can make payments.

perceived_liquidity - Perceived liquidity is the ratio of cash on hand to target cash required to support the firm's expenditures. Neutral before operations begin. Note that we assume there is no significant delay or bias in the employee's perception of the firm's cash position (we assume transparency). This assumption could be relaxed by including delays or biases that would for example prevent employees from discovering that a firm was in financial difficulty, as at Enron and WorldCom.

total_current_assets - Total current assets are cash and value of the inventory (Note that there are no accounts receivable as all receivables are assumed to be received instantly).

 

cash_flow_before_financing[company] = sales_revenue[company] + proceeds_from_sale_of_assets[company] - required_payments[company]

Units: $/Year

Expected cash flow before financing is the sum of revenue and any revenue from assets sold less required expenditures.

Uses:

financing_required - The financing the firm requires is (nonnegative part of) the amount needed to adjust the cash balance to the target level less the firm's cash flow before financing. Note that we do not model the possibility of share buybacks (financing required is constrained to be nonnegative).

 

cash_in[company] = sales_revenue[company] + proceeds_from_sale_of_equity[company] + proceeds_from_sale_of_assets[company]

Units: $/Year

Total cash received is the sum of sales revenue and the proceeds from the sale of shares to the public.

Uses:

Cash - This stock tracks the amount of cash currently held by the company.

 

cash_out[company] = MIN(required_payments[company], maximum_payments_from_cash_on_hand[company])

Units: $/Year

The firm makes payments at the required rate or the maximum rate it can based on its cash balance, whichever is less.

Uses:

Cash - This stock tracks the amount of cash currently held by the company.

payment_of_accounts_payable - Accounts payable fall with the actual payments made by the firm.

 

change_in_retained_earnings[company] = net_income[company]

Units: $/Year

This formula calculated the Retain Earnings coming from both operations and fundraising.

Uses:

Cumulative_Retained_Earnings - This variable measures the Retained Earnings for the company.

 

cost_per_customer_contact[company] = ZIDZ(customer_support_salary_cost[company], customer_contacts[company])

Units: $/contact

The average cost per customer contact. Pureplay eretailers incur average costs of $6 per customer contact. Multi channel retailers with existing call centers and experienced staff only incur $1.70 per call. ((If replaced by email: $3.80 for manual, $0.25 for automated execution)). (Shop.org)

 

cost_per_pageview[company] = ZIDZ(engineering_salary_costs[company] + server_infrastructure_investment[company], total_pageviews[company])

Units: $/pageview

The average cost per pageview is the ratio of the sum of engineering and server infrastructure costs to total pageviews.

 

Cumulative_Carry_Forward_Losses[company] = INTEG(carry_forward_loss[company] - decrease_in_carry_forward_losses[company], 0)

Units: $

The firm's cumulative losses carried forward to offset potential future profit; increased by the net loss, decreases as the carry forward is used or expires.

Uses:

expiration_of_unused_carry_forward_losses - Carry forward losses expire after a specified time.

maximum_carry_forward_loss_applicable_to_current_tax_liability - The maximum rate the firm can draw down its prior losses to offset current tax liabilities. The time constant is assumed to be very short, so is set to the simulation time step, allowing the entire carry forward loss to be used in one time step if needed.

 

Cumulative_Retained_Earnings[company] = INTEG(change_in_retained_earnings[company], 0)

Units: $

This variable measures the Retained Earnings for the company.

Uses:

equity - This variable tracks total equity as part of the simulated balance sheet.

 

current_liabilities[company] = Accounts_Payable[company]

Units: $

The current liabilities are equal to the account payable as the model does not include long term debt.

Uses:

total_liabilities - This measures the total liabilities of the company. There is no long term debt in this model.

 

customer_contacts[company] = total_transactions[company] * CUSTOMER_CONTACTS_PER_TRANSACTION

Units: contact/Year

The total number of contacts with customers to which the firm must respond.

Uses:

cost_per_customer_contact - The average cost per customer contact. Pureplay eretailers incur average costs of $6 per customer contact. Multi channel retailers with existing call centers and experienced staff only incur $1.70 per call. ((If replaced by email: $3.80 for manual, $0.25 for automated execution)). (Shop.org)

 

decrease_in_carry_forward_losses[company] = expiration_of_unused_carry_forward_losses[company] + carry_forward_loss_applied_to_current_tax_liability[company]

Units: $/Year

Carry forward losses can be used or expire.

Uses:

Cumulative_Carry_Forward_Losses - The firm's cumulative losses carried forward to offset potential future profit; increased by the net loss, decreases as the carry forward is used or expires.

 

depreciation[company] = server_depreciation[company] + real_estate_depreciation[company]

Units: $/Year

Total depreciation is depreciation of server infrastructure plus real estate depreciation.

Uses:

indirect_costs_per_unit - The indirect costs of operation per unit ordered. Zero prior to operations.

operating_income - The Operating Income is calculated by deducting operating expenses and depreciation from the Gross Margin.

 

DESIRED_CASH_COVERAGE[company] = 0.167

Units: Year

The fraction of a year of expected expenditures the firm desires to have in cash.

Uses:

target_cash_on_hand - The firm seeks to maintain cash sufficient to provide a certain coverage of its required expenditures.

 

"ECONOMIES_OF_SCALE_FOR_G&A"=0.8

Units: dimensionless

Determines the strength of the scale economy effect for G&A expenses.

Uses:

variable_g&a_expense - The variable component of administrative overhead depends on order volume.

 

EFFECTIVE_TAX_RATE = 0.25

Units: dimensionless

The effective corporate tax rate.

Uses:

tax_payments - Tax payments are based on taxable income after any carry forward losses are applied and the effective tax rate.

 

equity[company] = Cumulative_Retained_Earnings[company] + Paid_In_Capital[company]

Units: $

This variable tracks total equity as part of the simulated balance sheet.

Uses:

total_liabilities_and_equity - This measures total liabilities plus equity.

 

expiration_of_unused_carry_forward_losses[company] = Cumulative_Carry_Forward_Losses[company]/AVERAGE_LOSS_CARRY_FORWARD_PERIOD

Units: $/Year

Carry forward losses expire after a specified time.

Uses:

decrease_in_carry_forward_losses - Carry forward losses can be used or expire.

 

extraordinary_charges[company] = net_loss_on_sale_of_assets[company]

Units: $/Year

Losses on sales of assets add to extraordinary charges against income.

Uses:

net_income_before_tax - Net income before tax is operating profit less any extraordinary charges.

 

financing_required[company] = MAX(0, adjustment_to_financing_for_cash[company] - cash_flow_before_financing[company])

Units: $/Year

The financing the firm requires is (nonnegative part of) the amount needed to adjust the cash balance to the target level less the firm's cash flow before financing.  Note that we do not model the possibility of share buybacks (financing required is constrained to be nonnegative).

Uses:

funds_to_be_raised_from_equity_sales - The firm seeks to raise a fraction of its financing needs through sale of shares to the public.

 

"FIXED_G&A_EXPENSE"[company]=100000

Units: $/Year

The fixed, minimum component of the firm's administrative and overhead expenses.

Uses:

general_and_administrative_expense - Administrative and overhead expenses consist of a fixed and variable component.

 

general_and_administrative_expense[company] = company_in_operation_switch[company] * ("FIXED_G&A_EXPENSE"[company] + "variable_g&a_expense"[company])

Units: $/Year

Administrative and overhead expenses consist of a fixed and variable component.

Uses:

annualized_quarterly_general_and_administrative_expense - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

salary_expense - This calculates all salary expenses of the company.

 

gross_margin[company] = sales_revenue[company] - cost_of_goods_sold[company]

Units: $/Year

The gross margin is the difference between revenue and COGS.

Uses:

annualized_quarterly_gross_margin - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

gross_margin_per_share - The ratio of total gross margin to the number of shares outstanding.

operating_income - The Operating Income is calculated by deducting operating expenses and depreciation from the Gross Margin.

 

increase_in_accounts_payable[company] = increase_in_value_of_inventory[company] + operating_expenses[company] + tax_payments[company] + cost_of_real_estate_infrastructure[company] + server_investment[company]

Units: $/Year

All expenses accumulate in accounts payable until they are paid.

Uses:

Accounts_Payable - This stock keeps track of accounts payable. In this model, accounts payable are paid consistently based on the normal payment time. There is no liquidity management.

net_change_in_accounts_payable - This variable measures the net change in Accounts payable by comparing the inflow and the outflow.

 

initial_funding[company] = PULSE(STARTUP_DATE[company], TIME_STEP) * INITIAL_CASH[company]/TIME_STEP

Units: $/Year

The initial funding represents the amount of cash made available to the company at its start date.

Uses:

Cash - This stock tracks the amount of cash currently held by the company.

sale_of_equity - The Inflow to the Sale of equity is determined by the initial funding and other money raised.

 

m_and_s_as_percentage_of_sales[company] = ZIDZ(marketing_and_sales[company], sales_revenue[company])

Units: dimensionless

The ratio of marketing and sales expenses to sales.

 

marketing_and_sales[company] = inventory_costs[company] + total_marketing_spending[company] + customer_support_salary_cost[company]

Units: $/Year

Marketing and sales expense consists of marketing spending plus the costs of customer support and inventory.

Uses:

annualized_quarterly_marketing_and_sales - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

m_and_s_as_percentage_of_sales - The ratio of marketing and sales expenses to sales.

 

maximum_carry_forward_loss_applicable_to_current_tax_liability[company] = Cumulative_Carry_Forward_Losses[company]/TIME_STEP

Units: $/Year

The maximum rate the firm can draw down its prior losses to offset current tax liabilities. The time constant is assumed to be very short, so is set to the simulation time step, allowing the entire carry forward loss to be used in one time step if needed.

Uses:

carry_forward_loss_applied_to_current_tax_liability - The carry forward loss applied to offset current taxable income is the lesser of current taxable income or the total carry forward credit available.

 

maximum_payments_from_cash_on_hand[company] = Cash[company]/minimum_cash_disbursement_time

Units: $/Year

The maximum rate at which the firm will make payments, based on the cash balance and the fastest time period over which the firm can make payments.

Uses:

cash_out - The firm makes payments at the required rate or the maximum rate it can based on its cash balance, whichever is less.

 

minimum_cash_disbursement_time = TIME_STEP

Units: Year

The firm can pay out all its remaining cash in one time step (that is, the actual disbursement time is very small relative to the time step).

Uses:

maximum_payments_from_cash_on_hand - The maximum rate at which the firm will make payments, based on the cash balance and the fastest time period over which the firm can make payments.

 

net_change_in_accounts_payable[company] = increase_in_accounts_payable[company] - payment_of_accounts_payable[company]

Units: $/Year

This variable measures the net change in Accounts payable by comparing the inflow and the outflow.

 

net_income[company] = net_income_before_tax[company] - tax_payments[company]

Units: $/Year

The Net income is income after taxes.

Uses:

annualized_quarterly_net_income - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

change_in_retained_earnings - This formula calculated the Retain Earnings coming from both operations and fundraising.

earnings_per_share - Earnings per share is net income divided by the number of shares outstanding.

recent_net_income - The financial results of the firm are reported with a delay.

 

net_income_before_tax[company] = operating_income[company] - extraordinary_charges[company]

Units: $/Year

Net income before tax is operating profit less any extraordinary charges.

Uses:

net_income - The Net income is income after taxes.

taxable_income - Taxable income is NIBT, that is, operating income less any extraordinary charges.

 

net_loss_on_sale_of_assets[company] = reduction_in_real_estate_value_from_disinvestment[company] + reduction_in_server_infrastructure_from_disinvestment[company] - proceeds_from_sale_of_assets[company]

Units: $/Year

The loss on sale of assets (server infrastructure or real estate) is the reduction in their book value less any cash realized on their sale.

Uses:

extraordinary_charges - Losses on sales of assets add to extraordinary charges against income.

 

new_loyal_users[company] = capture_of_high_volume_buyers[company] + capture_of_occasional_buyers[company] + increase_in_actual_online_shoppers[company]

Units: People/Year

The rate at which the firm acquires new loyal users.

Uses:

acquisition_costs_per_customer - The cost of each new loyal customer acquired is the ratio of total marketing spending to the rate at which the firm acquires new loyal customers.

 

NORMAL_PAYMENT_TIME = 0.1

Units: years

This parameter measures the normal time until accounts payable are settled. It is assumed to be 3 months.

Uses:

required_payments - The firm seeks to pay accounts payable in the normal payment time.

 

operating_expenses[company] = total_editorial_cost[company] + inventory_costs[company] + salary_expense[company] + total_marketing_spending[company]

Units: $/Year

Operating expenses are the sum of all expenses except taxes and depreciation.

Uses:

annualized_quarterly_operating_expenses - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

increase_in_accounts_payable - All expenses accumulate in accounts payable until they are paid.

indirect_costs_per_unit - The indirect costs of operation per unit ordered. Zero prior to operations.

operating_income - The Operating Income is calculated by deducting operating expenses and depreciation from the Gross Margin.

 

operating_income[company] = gross_margin[company] - operating_expenses[company] - depreciation[company]

Units: $/Year

The Operating Income is calculated by deducting operating expenses and depreciation from the Gross Margin.

Uses:

annualized_quarterly_operating_income - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

net_income_before_tax - Net income before tax is operating profit less any extraordinary charges.

 

Paid_In_Capital[company] = INTEG(sale_of_equity[company], 0)

Units: $

This variable tracks paid in capital raised through sale of equity.

Uses:

equity - This variable tracks total equity as part of the simulated balance sheet.

 

payment_of_accounts_payable[company] = cash_out[company]

Units: $/Year

Accounts payable fall with the actual payments made by the firm.

Uses:

Accounts_Payable - This stock keeps track of accounts payable. In this model, accounts payable are paid consistently based on the normal payment time. There is no liquidity management.

net_change_in_accounts_payable - This variable measures the net change in Accounts payable by comparing the inflow and the outflow.

 

perceived_liquidity[company] = XIDZ(Cash[company], target_cash_on_hand[company], 1)

Units: dimensionless

Perceived liquidity is the ratio of cash on hand to target cash required to support the firm's expenditures. Neutral before operations begin.  Note that we assume there is no significant delay or bias in the employee's perception of the firm's cash position (we assume transparency).  This assumption could be relaxed by including delays or biases that would for example prevent employees from discovering that a firm was in financial

difficulty, as at Enron and WorldCom.

Uses:

effect_of_liquidity_on_editorial - The fraction of revenue allocated to editorial and content development drops as liquidity falls.

effect_of_liquidity_on_marketing - Low liquidity force the firm to cut back on marketing.

effect_of_liquidity_on_server_infrastructure - Low liquidity force the firm to reduce server infrastructure.

effect_of_liquidity_on_staff - The effect of liquidity on staff reduces the authorized headcount when the firm's cash is low.

expected_layoff_or_failure_hazard_rate - The hazard rate (per year) that the firm will fail or lay off its employees. Rises as perceived liquidity falls. For simplicity we assume the annual hazard rate of failure is a normal rate divided by perceived liquidity, that is, the hazard rises in inverse proportion to liquidity.

 

proceeds_from_employee_options[company] = SUM(total_basis_of_options_exercised[company, department!])

Units: $/Year

The cash proceeds received by the firm from employees exercising their options is the total, across all departments, of the amount paid in by employees for the strike price of the options they exercise.

Uses:

proceeds_from_sale_of_equity - The rate at which money is raised by sale of equity depends on the total shares sold, including the shares sold at the IPO, and the share price. In addition, the firm receives the proceeds from options exercised by employees (the strike price multiplied by the number of options exercised by employees).

 

proceeds_from_real_estate_disinvestment[company] = SALVAGE_VALUE_RATIO_FOR_ASSETS * reduction_in_real_estate_value_from_disinvestment[company]

Units: $/Year

When the firm liquidates excess real estate holdings it receives only a fraction of the book value.

Uses:

proceeds_from_sale_of_assets - Total proceeds from asset sales is the sum of the proceeds from liquidating server infrastructure and real estate.

 

proceeds_from_sale_of_assets[company] = proceeds_from_server_disinvestment[company] + proceeds_from_real_estate_disinvestment[company]

Units: $/Year

Total proceeds from asset sales is the sum of the proceeds from liquidating server infrastructure and real estate.

Uses:

cash_flow_before_financing - Expected cash flow before financing is the sum of revenue and any revenue from assets sold less required expenditures.

cash_in - Total cash received is the sum of sales revenue and the proceeds from the sale of shares to the public.

net_loss_on_sale_of_assets - The loss on sale of assets (server infrastructure or real estate) is the reduction in their book value less any cash realized on their sale.

 

proceeds_from_sale_of_equity[company] = (new_shares_issued_to_public[company] + ipo_shares[company]) * stock_price[company] + proceeds_from_employee_options[company]

Units: $/Year

The rate at which money is raised by sale of equity depends on the total shares sold, including the shares sold at the IPO, and the share price. In addition, the firm receives the proceeds from options exercised by employees (the strike price multiplied by the number of options exercised by employees).

Uses:

cash_in - Total cash received is the sum of sales revenue and the proceeds from the sale of shares to the public.

sale_of_equity - The Inflow to the Sale of equity is determined by the initial funding and other money raised.

 

proceeds_from_server_disinvestment[company] = SALVAGE_VALUE_RATIO_FOR_ASSETS * reduction_in_server_infrastructure_from_disinvestment[company]

Units: $/Year

The firm receives a fraction of the value of any servers it sells.

Uses:

proceeds_from_sale_of_assets - Total proceeds from asset sales is the sum of the proceeds from liquidating server infrastructure and real estate.

 

prod_dev_as_percentage_of_sales[company] = ZIDZ(product_development[company], sales_revenue[company])

Units: dimensionless

The ratio of product development costs to revenue.

 

product_development[company] = total_editorial_cost[company] + engineering_salary_costs[company]

Units: $/Year

Product development costs include the cost of content development and the fraction of server infrastructure and engineering workforce costs devoted to new product and new technology development.

Uses:

annualized_quarterly_product_development - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

prod_dev_as_percentage_of_sales - The ratio of product development costs to revenue.

 

QUARTERS_PER_YEAR = 4

Units: 1/Year

The number of quarters per year.

Uses:

switch_to_flush_quarterly_accumulators - Switch to flush contents of quarterly accumulators. 0 unless end of quarter.

 

reduction_in_server_infrastructure_from_disinvestment[company] = MAX(0, - server_infrastructure_investment[company])

Units: $/Year

The reduction in server infrastructure is the magnitude of the negative part of server infrastructure investment.

Uses:

net_loss_on_sale_of_assets - The loss on sale of assets (server infrastructure or real estate) is the reduction in their book value less any cash realized on their sale.

proceeds_from_server_disinvestment - The firm receives a fraction of the value of any servers it sells.

 

"REFERENCE_VOLUME_FOR_G&A_EXPENSES"=1.5e+007

Units: $/Year

Uses:

variable_g&a_expense - The variable component of administrative overhead depends on order volume.

 

required_payments[company] = Accounts_Payable[company]/NORMAL_PAYMENT_TIME

Units: $/Year

The firm seeks to pay accounts payable in the normal payment time.

Uses:

cash_flow_before_financing - Expected cash flow before financing is the sum of revenue and any revenue from assets sold less required expenditures.

cash_out - The firm makes payments at the required rate or the maximum rate it can based on its cash balance, whichever is less.

target_cash_on_hand - The firm seeks to maintain cash sufficient to provide a certain coverage of its required expenditures.

 

salary_expense[company] = (customer_support_salary_cost[company] + engineering_salary_costs[company] + general_and_administrative_expense[company])

Units: $/Year

This calculates all salary expenses of the company.

Uses:

operating_expenses - Operating expenses are the sum of all expenses except taxes and depreciation.

 

sale_of_equity[company] = proceeds_from_sale_of_equity[company] + initial_funding[company] + initial_investment_in_server_infrastructure[company] + initial_investment_in_real_estate[company]

Units: $/Year

The Inflow to the Sale of equity is determined by the initial funding and other money raised.

Uses:

Paid_In_Capital - This variable tracks paid in capital raised through sale of equity.

 

sales_revenue[company] = price[company] * shipments[company]

Units: $/Year

Revenue is recognized when items ship.

Uses:

annualized_quarterly_revenue - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

cash_flow_before_financing - Expected cash flow before financing is the sum of revenue and any revenue from assets sold less required expenditures.

cash_in - Total cash received is the sum of sales revenue and the proceeds from the sale of shares to the public.

effective_sales_revenue_for_expected_growth - The fractional growth rate for startups is close to infinite since the base is so small. Investors and managers do not expect such rates to continue, but instead base their estimates of growth on a minimum revenue level.

gross_margin - The gross margin is the difference between revenue and COGS.

m_and_s_as_percentage_of_sales - The ratio of marketing and sales expenses to sales.

marketshare - Market share is calculated by comparing the companies sales revenue to total sales revenue in the industry.

prod_dev_as_percentage_of_sales - The ratio of product development costs to revenue.

recent_sales_revenue - Perceived Sales revenue. Actual sales revenue delayed by the time it takes to report financial results.

total_market - The total market size is the sum of the transaction revenue of the individual companies.

 

server_investment[company] = MAX(0, server_infrastructure_investment[company])

Units: $/Year

The cost of any server infrastructure acquired. Must be nonnegative; when the firm liquidates server capacity it receives less than its book value per unit.

Uses:

increase_in_accounts_payable - All expenses accumulate in accounts payable until they are paid.

 

switch_to_flush_quarterly_accumulators=IF_THEN_ELSE(INTEGER(QUARTERS_PER_YEAR*(Time-1990)) = QUARTERS_PER_YEAR * (Time - 1990) , 1, 0)

Units: dimensionless

Switch to flush contents of quarterly accumulators. 0 unless end of quarter.

Uses:

annualized_quarterly_cogs - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_general_and_administrative_expense - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_gross_margin - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_marketing_and_sales - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_net_income - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_operating_expenses - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_operating_income - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_product_development - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

annualized_quarterly_revenue - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

 

target_cash_on_hand[company] = DESIRED_CASH_COVERAGE[company] * required_payments[company]

Units: $

The firm seeks to maintain cash sufficient to provide a certain coverage of its required expenditures.

Uses:

adjustment_to_financing_for_cash - The firm seeks to adjust its cash balance to the target level of the Time to Adjust Cash.

perceived_liquidity - Perceived liquidity is the ratio of cash on hand to target cash required to support the firm's expenditures. Neutral before operations begin. Note that we assume there is no significant delay or bias in the employee's perception of the firm's cash position (we assume transparency). This assumption could be relaxed by including delays or biases that would for example prevent employees from discovering that a firm was in financial difficulty, as at Enron and WorldCom.

 

tax_payments[company] = EFFECTIVE_TAX_RATE * taxable_income_after_carry_forward_losses[company]

Units: $/Year

Tax payments are based on taxable income after any carry forward losses are applied and the effective tax rate.

Uses:

increase_in_accounts_payable - All expenses accumulate in accounts payable until they are paid.

net_income - The Net income is income after taxes.

 

taxable_income[company] = net_income_before_tax[company]

Units: $/Year

Taxable income is NIBT, that is, operating income less any extraordinary charges.

Uses:

carry_forward_loss - The firm can accumulate losses and use them to offset future profits in calculating taxable income.

carry_forward_loss_applied_to_current_tax_liability - The carry forward loss applied to offset current taxable income is the lesser of current taxable income or the total carry forward credit available.

taxable_income_after_carry_forward_losses - Taxable income after carry forward losses are applied. Carry forward losses reduce taxable income.

 

taxable_income_after_carry_forward_losses[company] = MAX(0, taxable_income[company]) - carry_forward_loss_applied_to_current_tax_liability[company]

Units: $/Year

Taxable income after carry forward losses are applied. Carry forward losses reduce taxable income.

Uses:

tax_payments - Tax payments are based on taxable income after any carry forward losses are applied and the effective tax rate.

 

TIME_TO_ADJUST_CASH = 0.25

Units: years

The time over which the firm seeks to bring its cash balance in line with the target level.

Uses:

adjustment_to_financing_for_cash - The firm seeks to adjust its cash balance to the target level of the Time to Adjust Cash.

 

total_assets[company] = Server_Infrastructure[company] + total_current_assets[company] + Real_Estate_Infrastructure[company] + Value_Of_Inventory[company]

Units: $

This accounting formula measures Total assets.

Uses:

balance_sheet_error - This is a control variable that tests the basic accounting rule that Total assets must equal total liabilities plus equity. Returns the error as a fraction of total assets. Zero if assets are zero.

 

total_current_assets[company] = Cash[company]

Units: $

Total current assets are cash and value of the inventory (Note that there are no accounts receivable as all receivables are assumed to be received instantly).

Uses:

total_assets - This accounting formula measures Total assets.

 

total_liabilities[company] = current_liabilities[company]

Units: $

This measures the total liabilities of the company. There is no long term debt in this model.

Uses:

breakup_value - The minimum value of the firm is its breakup or liquidation value, given by its cash, plus a fraction of its nonliquid assets, less its liabilities. The Salvage Value Ratio is typically < 1 because the firm will realize less than book value for its assets if forced to liquidate them. Breakup value is not less than zero.

total_liabilities_and_equity - This measures total liabilities plus equity.

 

total_liabilities_and_equity[company] = equity[company] + total_liabilities[company]

Units: $

This measures total liabilities plus equity.

Uses:

balance_sheet_error - This is a control variable that tests the basic accounting rule that Total assets must equal total liabilities plus equity. Returns the error as a fraction of total assets. Zero if assets are zero.

 

"UNIT_G&A_EXPENSE"[company]=2

Units: $/Item

The variable overhead and administrative cost per item sold.

Uses:

variable_g&a_expense - The variable component of administrative overhead depends on order volume.

 

"variable_g&a_expense"[company]="REFERENCE_VOLUME_FOR_G&A_EXPENSES"*("UNIT_G&A_EXPENSE"[company]*orders[company]/"REFERENCE_VOLUME_FOR_G&A_EXPENSES")^"ECONOMIES_OF_SCALE_FOR_G&A"

Units: $/Year

The variable component of administrative overhead depends on order volume.

Uses:

general_and_administrative_expense - Administrative and overhead expenses consist of a fixed and variable component.

 

********************************

   .Financial_markets

********************************

 

BASE_FOR_GROWTH_RATE_CALCULATION = 1e + 008

Units: $/Year

The minimum base revenue rate used to estimate sales growth when the firm is very small.

Uses:

effective_sales_revenue_for_expected_growth - The fractional growth rate for startups is close to infinite since the base is so small. Investors and managers do not expect such rates to continue, but instead base their estimates of growth on a minimum revenue level.

 

breakup_value[company] = MAX(0, Cash[company] + SALVAGE_VALUE_RATIO_FOR_ASSETS * (Server_Infrastructure[company] + Real_Estate_Infrastructure[company]) - total_liabilities[company])

Units: $

The minimum value of the firm is its breakup or liquidation value, given by its cash, plus a fraction of its nonliquid assets, less its liabilities. The Salvage Value Ratio is typically < 1 because the firm will realize less than book value for its assets if forced to liquidate them. Breakup value is not less than zero.

Uses:

market_capitalization - The market value of the firm is the greater of the expected present value of future profits or the breakup value of the firm. Expected profits are discounted prior to the IPO.

 

DATA_SWITCH = 0

Units: dimensionless

Switch to control whether Amazon data will be used, when available, instead of simulated net income and recent sales. Used during the partial model estimation.

Uses:

recent_net_income_wdata - Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

recent_sales_revenue_wdata - Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

 

DISCOUNT_RATE = 0.12

Units: 1/Year

The discount rate used to evaluate the present value of expected profits.

Uses:

growth_adjusted_discount_factor - The discount rate used to value the expected earnings of the firm is a nonlinear function of the discount rate and the expected rate of growth in future earnings. Based on the formula for the NPV of an exponentially growing earnings stream, E(0)/(d — g), where E(0) is current earnings, d is the discount rate, and g is expected growth. The nonlinear function keep the effective discount rate nonnegative when denominator < 0. The minimum value of the function is the inverse of the maximum P/E ratio the capital markets are willing to pay.

 

earnings_per_share[company] = net_income[company]/Shares_Outstanding[company]

Units: $/(Year*shares)

Earnings per share is net income divided by the number of shares outstanding.

Uses:

price_earnings_ratio - The Price Earnings Ratio is the ratio of the stock price to earnings per share. It is set to zero if earnings are zero or less.

 

effective_sales_revenue_for_expected_growth[company] = MAX(BASE_FOR_GROWTH_RATE_CALCULATION, sales_revenue[company])

Units: $/Year

The fractional growth rate for startups is close to infinite since the base is so small. Investors and managers do not expect such rates to continue, but instead base their estimates of growth on a minimum revenue level.

Uses:

recent_sales_revenue_for_growth_rate_calculation - Recent sales averages sales over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16. Effective sales revenue for expected growth is the greater of actual sales or a base that represents a minimum revenue level, so that expected growth rates remain reasonable when sales are very small (the growth rate on the first sale is infinite, but expectations will not rise to infinity).

 

expected_growth_in_revenue[company] = SMOOTHI(indicated_growth_in_revenue[company], TIME_TO_ADJUST_SALES_GROWTH_EXPECTATIONS, INITIAL_EXPECTED_REVENUE_GROWTH[company])

Units: dimensionless/Year

The expected fractional growth rate in sales revenue adjusts exponentially to the indicated rate.

Uses:

growth_adjusted_discount_factor - The discount rate used to value the expected earnings of the firm is a nonlinear function of the discount rate and the expected rate of growth in future earnings. Based on the formula for the NPV of an exponentially growing earnings stream, E(0)/(d — g), where E(0) is current earnings, d is the discount rate, and g is expected growth. The nonlinear function keep the effective discount rate nonnegative when denominator < 0. The minimum value of the function is the inverse of the maximum P/E ratio the capital markets are willing to pay.

 

Expected_Long_Run_Return_On_Sales = SMOOTH_N(indicated_industry_return_on_sales, TIME_TO_ADJUST_EXPECTED_LONG_RUN_RETURN_ON_SALES, INITIAL_EXPECTED_RETURN_ON_SALES, 3)

Units: dimensionless

Investors' expectation for operating profit as a fraction of sales revenue in the long run. Adjusts gradually from the initial level to the indicated level.

Uses:

expected_steady_state_net_income - Investors expect the profits of the firm, over the long haul, to be a certain fraction of recent sales revenue.

return_on_sales_for_valuation - The return on sales investors expect to be willing to buy shares.

 

expected_net_income[company] = Weight_On_Actual_Net_Income_For_Valuation[company] * recent_net_income_wdata[company] + (1 - Weight_On_Actual_Net_Income_For_Valuation[company]) * expected_steady_state_net_income[company]

Units: $/Year

The expected profit of the firm used to value the firm is a weighted average of current profit and the expected steady state profit the firm is expected to achieve. The weight on actual net income is low during the startup honeymoon period, when investors are willing to tolerate losses while the firm invests in growth (through high expenditures and low prices). After the startup honeymoon, however, investors revert to traditional

valuation measures based on the actual profitability of the firm.

Uses:

expected_present_value_of_profit - The expected present value of the firm's profit is the net present value of expected net income, adjusted for future expected growth and for the market leadership premium. The growth adjusted discount factor is based on the discount rate for earnings, adjusted to reflect investors' expectations for future growth in earnings. Constrained to be nonnegative (in the case where expected net income is negative, such as when the firm consistently loses money).

 

expected_present_value_of_profit[company] = MAX(0, premium_for_market_leadership[company] * expected_net_income[company]) /growth_adjusted_discount_factor[company]

Units: $

The expected present value of the firm's profit is the net present value of expected net income, adjusted for future expected growth and for the market leadership premium. The growth adjusted discount factor is based on the discount rate for earnings, adjusted to reflect investors' expectations for future growth in earnings. Constrained to be nonnegative (in the case where expected net income is negative, such as when the firm consistently loses money).

Uses:

fraction_of_financing_from_equity - The fraction of financing required raised through stock sales to the public declines as the market's expectations of the NPV of future profits falls relative to the value investors require.

market_capitalization - The market value of the firm is the greater of the expected present value of future profits or the breakup value of the firm. Expected profits are discounted prior to the IPO.

 

expected_steady_state_net_income[company] = Expected_Long_Run_Return_On_Sales * recent_sales_revenue_wdata[company]

Units: $/Year

Investors expect the profits of the firm, over the long haul, to be a certain fraction of recent sales revenue.

Uses:

expected_net_income - The expected profit of the firm used to value the firm is a weighted average of current profit and the expected steady state profit the firm is expected to achieve. The weight on actual net income is low during the startup honeymoon period, when investors are willing to tolerate losses while the firm invests in growth (through high expenditures and low prices). After the startup honeymoon, however, investors revert to traditional valuation measures based on the actual profitability of the firm.

 

FINANCIAL_RESULTS_REPORTING_TIME = 0.25

Units: Year

The time required for the firm to report financial results.

Uses:

recent_net_income - The financial results of the firm are reported with a delay.

recent_sales_revenue - Perceived Sales revenue. Actual sales revenue delayed by the time it takes to report financial results.

recent_sales_revenue_for_growth_rate_calculation - Recent sales averages sales over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16. Effective sales revenue for expected growth is the greater of actual sales or a base that represents a minimum revenue level, so that expected growth rates remain reasonable when sales are very small (the growth rate on the first sale is infinite, but expectations will not rise to infinity).

 

fraction_of_financing_from_equity[company] = FUNCTION_FOR_FRACTION_OF_FINANCING_FROM_EQUITY(ZIDZ(expected_present_value_of_profit[company], required_present_value_of_profis[company]) )

Units: dimensionless

The fraction of financing required raised through stock sales to the public declines as the market's expectations of the NPV of future profits falls relative to the value investors require.

Uses:

funds_to_be_raised_from_equity_sales - The firm seeks to raise a fraction of its financing needs through sale of shares to the public.

 

FUNCTION_FOR_FRACTION_OF_FINANCING_FROM_EQUITY([(0,0)-(1,1)],(0,0),(0.2,0),(0.4,0.05),(0.6,0.15),(0.8,0.9),(1,1),(100,1))

Units: dimensionless

The firm's willingness to sell additional shares to the public falls as the stock price drops relative to the indicated level.

Uses:

fraction_of_financing_from_equity - The fraction of financing required raised through stock sales to the public declines as the market's expectations of the NPV of future profits falls relative to the value investors require.

 

FUNCTION_FOR_MARKET_LEADERSHIP_PREMIUM([(-0.5,0)-(1,2.5)],(-0.5,1),(-0.25,1),(0,1),(0.25,1),(0.5,1),(0.75,1),(1,1))

Units: dimensionless

Firms receive a valuation boost for market leadership. Leadership is assessed by comparing the firm's market share to the reference share given by 1/number of firms in the market.

Uses:

premium_for_market_leadership - The market's valuation of each firm depends on its market share relative to what it would have if all firms had equal shares. The markets give a premium for firms with the greatest market share, in the belief that leadership confers greater advantages through increasing returns and lock in.

 

funds_to_be_raised_from_equity_sales[company] = fraction_of_financing_from_equity[company] * financing_required[company]

Units: $/Year

The firm seeks to raise a fraction of its financing needs through sale of shares to the public.

Uses:

new_shares_issued_to_public - The firm issues shares to the public to finance its cash flow requirements and maintain normal liquidity. Prior to the IPO, these shares represent the equity sold to venture capitalists in private placements. After the IPO they represent secondary public offerings.

 

gross_margin_per_share[company] = gross_margin[company]/Shares_Outstanding[company]

Units: $/(Year*share)

The ratio of total gross margin to the number of shares outstanding.

Uses:

price_over_gross_margin_ratio - The ratio of the stock price to gross margin per share. Set to zero if gross margin is negative.

 

growth_adjusted_discount_factor[company] = IF_THEN_ELSE(DISCOUNT_RATE - expected_growth_in_revenue[company]>0.04, DISCOUNT_RATE - expected_growth_in_revenue[company], 0.04 * EXP(SENSITIVITY_OF_VALUATION_TO_RAPID_GROWTH * (DISCOUNT_RATE - expected_growth_in_revenue[company] - 0.04) ) )

Units: 1/Year

The discount rate used to value the expected earnings of the firm is a nonlinear function of the discount rate and the expected rate of growth in future earnings. Based on the formula for the NPV of an exponentially growing earnings stream, E(0)/(d — g), where E(0) is current earnings, d is the discount rate, and g is expected growth. The nonlinear function keep the effective discount rate nonnegative when denominator < 0. The minimum

value of the function is the inverse of the maximum P/E ratio the capital markets are willing to pay.

Uses:

expected_present_value_of_profit - The expected present value of the firm's profit is the net present value of expected net income, adjusted for future expected growth and for the market leadership premium. The growth adjusted discount factor is based on the discount rate for earnings, adjusted to reflect investors' expectations for future growth in earnings. Constrained to be nonnegative (in the case where expected net income is negative, such as when the firm consistently loses money).

required_present_value_of_profis - The market valuation the firm would have given recent sales and the expected return on sales, and discounted by the growth adjusted rate. Does not include the breakup value of the firm's assets.

 

HISTORIC_HORIZON_FOR_SALES_GROWTH = 2

Units: Year

The historic horizon for the estimation of future growth in revenue.

Uses:

historic_sales_revenue - The historic sales rate used to estimate future growth is formed by exponential smoothing of recent sales. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

indicated_growth_in_revenue - The indicated growth rate in revenue is the annualized fractional difference between recent and historic sales revenue. Set to zero if historic revenue is zero.

 

historic_sales_revenue[company] = SMOOTHI(recent_sales_revenue_wdata[company], HISTORIC_HORIZON_FOR_SALES_GROWTH, recent_sales_revenue_wdata[company]/(1 + INITIAL_EXPECTED_REVENUE_GROWTH[company] * HISTORIC_HORIZON_FOR_SALES_GROWTH) )

Units: $/Year

The historic sales rate used to estimate future growth is formed by exponential smoothing of recent sales. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

Uses:

indicated_growth_in_revenue - The indicated growth rate in revenue is the annualized fractional difference between recent and historic sales revenue. Set to zero if historic revenue is zero.

 

HONEYMOON_PERIOD = 3.8

Units: Year

Variable introduced during the policy analysis to simultaneously adjust the startup honeymoon period and the valuation weight adjustment time. These two variables were estimated independently during the original model calibration.

Uses:

startup_honeymoon_period - The length of the honeymoon period during which investors ignore current losses and value the firm using an expected steady state return on sales.

valuation_weight_adjustment_time - The time period over which the weight on actual net income for valuation adjusts to the indicated value, once the startup honeymoon period ends.

 

indicated_growth_in_revenue[company] = ZIDZ((recent_sales_revenue_wdata[company] - historic_sales_revenue[company]) , (historic_sales_revenue[company] * HISTORIC_HORIZON_FOR_SALES_GROWTH) )

Units: dimensionless/Year

The indicated growth rate in revenue is the annualized fractional difference between recent and historic sales revenue. Set to zero if historic revenue is zero.

Uses:

expected_growth_in_revenue - The expected fractional growth rate in sales revenue adjusts exponentially to the indicated rate.

 

indicated_industry_return_on_sales = IF_THEN_ELSE(Time>TIME_TO_SHIFT_FROM_EXPECTATION_TO_ACTUAL, industry_average_return_on_sales, INITIAL_EXPECTED_RETURN_ON_SALES)

Units: dimensionless

The indicated value of industry return on sales, to which investors' expectations adjust. Set to the initial expectation until a sufficient time has passed for investors to compile data on and assess industry experience.

Uses:

Expected_Long_Run_Return_On_Sales - Investors' expectation for operating profit as a fraction of sales revenue in the long run. Adjusts gradually from the initial level to the indicated level.

 

industry_average_return_on_sales = SUM(marketshare[company!] * return_on_sales[company!])

Units: dimensionless

Industry average return on sales is the return on sales of each firm weighted by its market share.

Uses:

indicated_industry_return_on_sales - The indicated value of industry return on sales, to which investors' expectations adjust. Set to the initial expectation until a sufficient time has passed for investors to compile data on and assess industry experience.

 

INITIAL_EXPECTED_RETURN_ON_SALES = 0.17

Units: dimensionless

The initial expectation of investors for steady state return on sales revenue.

Uses:

Expected_Long_Run_Return_On_Sales - Investors' expectation for operating profit as a fraction of sales revenue in the long run. Adjusts gradually from the initial level to the indicated level.

indicated_industry_return_on_sales - The indicated value of industry return on sales, to which investors' expectations adjust. Set to the initial expectation until a sufficient time has passed for investors to compile data on and assess industry experience.

 

INITIAL_EXPECTED_REVENUE_GROWTH[company] = 0

Units: 1/Year

The initial expectation for sales growth for the firm in the capital markets.

Uses:

expected_growth_in_revenue - The expected fractional growth rate in sales revenue adjusts exponentially to the indicated rate.

historic_sales_revenue - The historic sales rate used to estimate future growth is formed by exponential smoothing of recent sales. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

recent_sales_revenue_for_growth_rate_calculation - Recent sales averages sales over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16. Effective sales revenue for expected growth is the greater of actual sales or a base that represents a minimum revenue level, so that expected growth rates remain reasonable when sales are very small (the growth rate on the first sale is infinite, but expectations will not rise to infinity).

 

ipo_shares[company] = PULSE(IPO_DATE[company], TIME_STEP) * shares_issued_at_ipo[company]/TIME_STEP

Units: shares/Year

The shares issued at the IPO date. The entire value of the IPO is issues in one time step.

Uses:

Shares_Outstanding - The number of shares outstanding increases when new shares are issued for fundraising purposes, or when employees exercise options.

proceeds_from_sale_of_equity - The rate at which money is raised by sale of equity depends on the total shares sold, including the shares sold at the IPO, and the share price. In addition, the firm receives the proceeds from options exercised by employees (the strike price multiplied by the number of options exercised by employees).

 

market_capitalization[company] = MAX(breakup_value[company], expected_present_value_of_profit[company] * pre_ipo_discount[company]) * company_in_operation_switch[company]

Units: $

The market value of the firm is the greater of the expected present value of future profits or the breakup value of the firm. Expected profits are discounted prior to the IPO.

Uses:

stock_price - The stock price per share is the firm's total market value divided by the number of shares outstanding.

 

MINIMUM_RETURN_ON_SALES_FOR_VALUATION = 0.02

Units: dimensionless

The minimum return on sales investors would require to be willing to buy secondary issues.

Uses:

return_on_sales_for_valuation - The return on sales investors expect to be willing to buy shares.

 

MINIMUM_RETURNS_REQUIRED_AT_IPO = 1e + 008

Units: $

The minimum capital the firm needs to raise in their IPO.

Uses:

shares_issued_at_ipo - The number of shares sold to the public in the IPO. Determined by the funds raised and the share price.

 

new_shares_issued_to_public[company] = ZIDZ(funds_to_be_raised_from_equity_sales[company], stock_price[company])

Units: shares/Year

The firm issues shares to the public to finance its cash flow requirements and maintain normal liquidity. Prior to the IPO, these shares represent the equity sold to venture capitalists in private placements. After the IPO they represent secondary public offerings.

Uses:

Shares_Outstanding - The number of shares outstanding increases when new shares are issued for fundraising purposes, or when employees exercise options.

proceeds_from_sale_of_equity - The rate at which money is raised by sale of equity depends on the total shares sold, including the shares sold at the IPO, and the share price. In addition, the firm receives the proceeds from options exercised by employees (the strike price multiplied by the number of options exercised by employees).

 

pre_ipo_discount[company]=IF_THEN_ELSE(Time< = IPO_DATE[company], 0.75, 1)

Units: dimensionless

The stock valuation is discounted prior to an IPO as the stock is less liquid as an investment.

Uses:

market_capitalization - The market value of the firm is the greater of the expected present value of future profits or the breakup value of the firm. Expected profits are discounted prior to the IPO.

 

premium_for_market_leadership[company] = 1 + SWITCH_FOR_MARKET_LEADERSHIP_PREMIUM * (FUNCTION_FOR_MARKET_LEADERSHIP_PREMIUM(relative_market_share[company]) - 1)

Units: dimensionless

The market's valuation of each firm depends on its market share relative to what it would have if all firms had equal shares. The markets give a premium for firms with the greatest market share, in the belief that leadership confers greater advantages through increasing returns and lock in.

Uses:

expected_present_value_of_profit - The expected present value of the firm's profit is the net present value of expected net income, adjusted for future expected growth and for the market leadership premium. The growth adjusted discount factor is based on the discount rate for earnings, adjusted to reflect investors' expectations for future growth in earnings. Constrained to be nonnegative (in the case where expected net income is negative, such as when the firm consistently loses money).

 

price_earnings_ratio[company] = MAX(0, ZIDZ(stock_price[company], earnings_per_share[company]) )

Units: Year

The Price Earnings Ratio is the ratio of the stock price to earnings per share. It is set to zero if earnings are zero or less.

 

price_over_gross_margin_ratio[company] = MAX(0, ZIDZ(stock_price[company], gross_margin_per_share[company]) )

Units: Year

The ratio of the stock price to gross margin per share. Set to zero if gross margin is negative.

 

recent_net_income[company] = SMOOTH(net_income[company], FINANCIAL_RESULTS_REPORTING_TIME)

Units: $/Year

The financial results of the firm are reported with a delay.

Uses:

recent_net_income_wdata - Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

 

recent_net_income_wdata[COMPANY1]=IF_THEN_ELSE(DATA_SWITCH:AND:Time>1997.5:AND:Time< = 2002, AMZN_net_income, recent_net_income[COMPANY1])

recent_net_income_wdata[COMPANY2] = recent_net_income[COMPANY2]

recent_net_income_wdata[COMPANY3] = recent_net_income[COMPANY3]

Units: $/Year

Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

Uses:

expected_net_income - The expected profit of the firm used to value the firm is a weighted average of current profit and the expected steady state profit the firm is expected to achieve. The weight on actual net income is low during the startup honeymoon period, when investors are willing to tolerate losses while the firm invests in growth (through high expenditures and low prices). After the startup honeymoon, however, investors revert to traditional valuation measures based on the actual profitability of the firm.

return_on_sales - Net income as a fraction of sales revenue. Set to zero if recent sales revenue is zero.

 

recent_sales_revenue[company] = SMOOTHI(sales_revenue[company], FINANCIAL_RESULTS_REPORTING_TIME, 0)

Units: $/Year

Perceived Sales revenue. Actual sales revenue delayed by the time it takes to report financial results.

Uses:

editorial_budget - The budget for content development is the greater of a minimum rate or a fraction of recent revenue.

market_maturity_weight_for_marketing_allocation - Policy to reduce the fraction of revenues to marketing depending on market maturity. The assumption is that as the market reaches maturity, it will not be necessary to spend as much in marketing.

required_present_value_of_profis - The market valuation the firm would have given recent sales and the expected return on sales, and discounted by the growth adjusted rate. Does not include the breakup value of the firm's assets.

total_marketing_spending - Total marketing expenditures are determined by a fraction of sales, but are not less than a minimum rate. Marketing begins only after the firm enters the market.

 

recent_sales_revenue_for_growth_rate_calculation[company] = SMOOTHI(effective_sales_revenue_for_expected_growth[company], FINANCIAL_RESULTS_REPORTING_TIME, effective_sales_revenue_for_expected_growth[company]/(1 + INITIAL_EXPECTED_REVENUE_GROWTH[company] * FINANCIAL_RESULTS_REPORTING_TIME) )

Units: $/Year

Recent sales averages sales over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16. Effective sales revenue for expected growth is the greater of actual sales or a base that represents a minimum revenue level, so that expected growth rates remain reasonable when sales are very small (the growth rate on the first sale is infinite, but expectations will not

rise to infinity).

Uses:

recent_sales_revenue_wdata - Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

 

recent_sales_revenue_wdata[COMPANY1]=IF_THEN_ELSE(DATA_SWITCH=1:AND:Time>1997.5:AND:Time< = 2002, AMZN_net_sales, recent_sales_revenue_for_growth_rate_calculation[COMPANY1])

recent_sales_revenue_wdata[COMPANY2] = recent_sales_revenue_for_growth_rate_calculation[COMPANY2]

recent_sales_revenue_wdata[COMPANY3] = recent_sales_revenue_for_growth_rate_calculation[COMPANY3]

Units: $/Year

Intermediate variable to allow the introduction of historical data into the simulation. If the Data Switch is on, the variable will take historical values for the period when they are available.

Uses:

expected_steady_state_net_income - Investors expect the profits of the firm, over the long haul, to be a certain fraction of recent sales revenue.

historic_sales_revenue - The historic sales rate used to estimate future growth is formed by exponential smoothing of recent sales. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

indicated_growth_in_revenue - The indicated growth rate in revenue is the annualized fractional difference between recent and historic sales revenue. Set to zero if historic revenue is zero.

return_on_sales - Net income as a fraction of sales revenue. Set to zero if recent sales revenue is zero.

 

reference_market_share_for_valuation = ZIDZ(1, number_of_firms_in_market)

Units: dimensionless

The reference market share used for the leadership premium in valuation.

Uses:

relative_market_share - The market share of the firm relative to the share of the market it would get if all firms n had equal shares. Normalized by the maximum share of the firm (100%) less 1/n. This variable ranges from [-1/n, 1 ], with a normal value of zero (when the firm's share equals 1/n). Set to one if only one firm.

 

relative_market_share[company] = XIDZ(marketshare[company] - reference_market_share_for_valuation, (1 - reference_market_share_for_valuation) , 1)

Units: dimensionless

The market share of the firm relative to the share of the market it would get if all firms n had equal shares. Normalized by the maximum share of the firm (100%) less 1/n. This variable ranges from [-1/n, 1 ], with a normal value of zero (when the firm's share equals 1/n). Set to one if only one firm.

Uses:

premium_for_market_leadership - The market's valuation of each firm depends on its market share relative to what it would have if all firms had equal shares. The markets give a premium for firms with the greatest market share, in the belief that leadership confers greater advantages through increasing returns and lock in.

 

required_present_value_of_profis[company] = recent_sales_revenue[company] * return_on_sales_for_valuation/growth_adjusted_discount_factor[company]

Units: $

The market valuation the firm would have given recent sales and the expected return on sales, and discounted by the growth adjusted rate.  Does not include the breakup value of the firm's assets.

Uses:

fraction_of_financing_from_equity - The fraction of financing required raised through stock sales to the public declines as the market's expectations of the NPV of future profits falls relative to the value investors require.

 

return_on_sales[company] = ZIDZ(recent_net_income_wdata[company], recent_sales_revenue_wdata[company])

Units: dimensionless

Net income as a fraction of sales revenue. Set to zero if recent sales revenue is zero.

Uses:

industry_average_return_on_sales - Industry average return on sales is the return on sales of each firm weighted by its market share.

 

return_on_sales_for_valuation = MAX(MINIMUM_RETURN_ON_SALES_FOR_VALUATION, Expected_Long_Run_Return_On_Sales)

Units: dimensionless

The return on sales investors expect to be willing to buy shares.

Uses:

required_present_value_of_profis - The market valuation the firm would have given recent sales and the expected return on sales, and discounted by the growth adjusted rate. Does not include the breakup value of the firm's assets.

 

SALVAGE_VALUE_RATIO_FOR_ASSETS = 0.5

Units: dimensionless

The fraction of book value the firm would realize for its noncash assets if forced to liquidate them.

Uses:

breakup_value - The minimum value of the firm is its breakup or liquidation value, given by its cash, plus a fraction of its nonliquid assets, less its liabilities. The Salvage Value Ratio is typically < 1 because the firm will realize less than book value for its assets if forced to liquidate them. Breakup value is not less than zero.

proceeds_from_real_estate_disinvestment - When the firm liquidates excess real estate holdings it receives only a fraction of the book value.

proceeds_from_server_disinvestment - The firm receives a fraction of the value of any servers it sells.

 

SENSITIVITY_OF_VALUATION_TO_RAPID_GROWTH = 1.05

Units: dimensionless

This parameter determines the responsiveness of the price/earnings multiple assigned by the capital markets is to the expected growth in revenue when the expected growth rate exceeds the discount rate.

Uses:

growth_adjusted_discount_factor - The discount rate used to value the expected earnings of the firm is a nonlinear function of the discount rate and the expected rate of growth in future earnings. Based on the formula for the NPV of an exponentially growing earnings stream, E(0)/(d — g), where E(0) is current earnings, d is the discount rate, and g is expected growth. The nonlinear function keep the effective discount rate nonnegative when denominator < 0. The minimum value of the function is the inverse of the maximum P/E ratio the capital markets are willing to pay.

 

shares_issued_at_ipo[company] = ZIDZ(MINIMUM_RETURNS_REQUIRED_AT_IPO, stock_price[company])

Units: shares

The number of shares sold to the public in the IPO. Determined by the funds raised and the share price.

Uses:

ipo_shares - The shares issued at the IPO date. The entire value of the IPO is issues in one time step.

 

Shares_Outstanding[company] = INTEG(new_shares_issued_to_public[company] + ipo_shares[company] + shares_to_employees_from_option_exercise[company], INITIAL_NUMBER_OF_SHARES_OUTSTANDING[company])

Units: shares

The number of shares outstanding increases when new shares are issued for fundraising purposes, or when employees exercise options.

Uses:

earnings_per_share - Earnings per share is net income divided by the number of shares outstanding.

gross_margin_per_share - The ratio of total gross margin to the number of shares outstanding.

options_as_a_fraction_of_shares_outstanding - The number of options held by employees as a fraction of the total number of existing shares. Zero prior to entry.

stock_price - The stock price per share is the firm's total market value divided by the number of shares outstanding.

 

shares_to_employees_from_option_exercise[company] = SUM(options_exercised[company, department!])

Units: shares/Year

The number of shares outstanding increases with the sum of the options exercised by all types of employees.

Uses:

Shares_Outstanding - The number of shares outstanding increases when new shares are issued for fundraising purposes, or when employees exercise options.

 

startup_honeymoon_period = HONEYMOON_PERIOD

Units: years

The length of the honeymoon period during which investors ignore current losses and value the firm using an expected steady state return on sales.

Uses:

weight_on_actual_net_income_after_startup_honeymoon_period - After the honeymoon period for startups ends, the financial markets will use actual net income in their assessment of the firms value. The actual weight adjusts gradually to this level.

 

stock_price[company] = market_capitalization[company]/Shares_Outstanding[company]

Units: $/share

The stock price per share is the firm's total market value divided by the number of shares outstanding.

Uses:

expected_stock_price - Employees' expectations about the future stock price, which are used here to affect their decision to remain with the firm or quit, adjust slowly to the actual price (the decision to quit is not based on short term changes in share values).

fraction_of_options_exercised - Options are exercised only if they are in the money.

indicated_repricing_of_non_vested_options - If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

indicated_repricing_of_vested_options - If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

new_shares_issued_to_public - The firm issues shares to the public to finance its cash flow requirements and maintain normal liquidity. Prior to the IPO, these shares represent the equity sold to venture capitalists in private placements. After the IPO they represent secondary public offerings.

options_granted_per_existing_employee - Existing employees should receive options worth the Target Value. The current share price is used to determine the number of shares awarded. Zero if shares have no value.

options_granted_per_hire - Each new hire should receive options worth the Target Value. The current share price is used to determine the number of shares awarded. Zero if the share price is zero.

price_earnings_ratio - The Price Earnings Ratio is the ratio of the stock price to earnings per share. It is set to zero if earnings are zero or less.

price_over_gross_margin_ratio - The ratio of the stock price to gross margin per share. Set to zero if gross margin is negative.

proceeds_from_sale_of_equity - The rate at which money is raised by sale of equity depends on the total shares sold, including the shares sold at the IPO, and the share price. In addition, the firm receives the proceeds from options exercised by employees (the strike price multiplied by the number of options exercised by employees).

shares_issued_at_ipo - The number of shares sold to the public in the IPO. Determined by the funds raised and the share price.

strike_price_of_new_options - Options are issued with a strike price set at a specified ratio to the current stock price.

 

SWITCH_FOR_MARKET_LEADERSHIP_PREMIUM = 0

Units: dimensionless

Switch enabling market valuation to respond to the leadership premium (based on market share).

Uses:

premium_for_market_leadership - The market's valuation of each firm depends on its market share relative to what it would have if all firms had equal shares. The markets give a premium for firms with the greatest market share, in the belief that leadership confers greater advantages through increasing returns and lock in.

 

TIME_TO_ADJUST_EXPECTED_LONG_RUN_RETURN_ON_SALES = 3.7

Units: years

The time over which investor expectations for the long run steady state return on sales of the industry adjust to the indicated value based on actual experience.

Uses:

Expected_Long_Run_Return_On_Sales - Investors' expectation for operating profit as a fraction of sales revenue in the long run. Adjusts gradually from the initial level to the indicated level.

 

TIME_TO_ADJUST_SALES_GROWTH_EXPECTATIONS = 0.5

Units: Year

It takes time for expectations of growth to adjust to the indicated value.

Uses:

expected_growth_in_revenue - The expected fractional growth rate in sales revenue adjusts exponentially to the indicated rate.

 

TIME_TO_SHIFT_FROM_EXPECTATION_TO_ACTUAL = 2000

Units: Year

Uses:

indicated_industry_return_on_sales - The indicated value of industry return on sales, to which investors' expectations adjust. Set to the initial expectation until a sufficient time has passed for investors to compile data on and assess industry experience.

 

valuation_weight_adjustment_time = HONEYMOON_PERIOD

Units: Year

The time period over which the weight on actual net income for valuation adjusts to the indicated value, once the startup honeymoon period ends.

Uses:

Weight_On_Actual_Net_Income_For_Valuation - The weight investors give to actual net income in their valuation of the firm. Adjusts with a delay of the specified order to the indicated value of 1 once the startup honeymoon period ends.

 

weight_on_actual_net_income_after_startup_honeymoon_period[company] = STEP(1, STARTUP_DATE[company] + startup_honeymoon_period)

Units: dimensionless

After the honeymoon period for startups ends, the financial markets will use actual net income in their assessment of the firms value. The actual weight adjusts gradually to this level.

Uses:

Weight_On_Actual_Net_Income_For_Valuation - The weight investors give to actual net income in their valuation of the firm. Adjusts with a delay of the specified order to the indicated value of 1 once the startup honeymoon period ends.

 

Weight_On_Actual_Net_Income_For_Valuation[company] = SMOOTH_N(weight_on_actual_net_income_after_startup_honeymoon_period[company], valuation_weight_adjustment_time, 0, 3)

Units: dimensionless

The weight investors give to actual net income in their valuation of the firm. Adjusts with a delay of the specified order to the indicated value of 1 once the startup honeymoon period ends.

Uses:

expected_net_income - The expected profit of the firm used to value the firm is a weighted average of current profit and the expected steady state profit the firm is expected to achieve. The weight on actual net income is low during the startup honeymoon period, when investors are willing to tolerate losses while the firm invests in growth (through high expenditures and low prices). After the startup honeymoon, however, investors revert to traditional valuation measures based on the actual profitability of the firm.

 

********************************

   .Human_resources

********************************

 

adjustment_for_growth_during_hiring_delay[company,department] = 1 + planned_growth_in_transactions[company] * HIRING_DELAY[company, department]

Units: dimensionless

The growth adjustment is calculated such that it covers the growth during the period that it takes to hire the people according to the hiring plan.

Uses:

required_staff - The number of employees the firm requires is based on the number needed currently, and adjusted by the growth expected between the current time and the time at which the positions are likely to be filled. Not less than the initial number of employees.

 

assimilation_rate[company,department] = (Rookie_Employees[company, department]/ASSIMILATION_TIME[company, department]) * company_in_operation_switch[company]

Units: People/Year

Rookies that gain sufficient experience become Experienced Employees.

Uses:

Experienced_Employees - The number of experienced employees. Increased by assimilation of inexperienced employees into the experienced ranks and decreased by attrition and layoffs.

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

 

ASSIMILATION_TIME[company,ENGIN] = 2

ASSIMILATION_TIME[company,CUSTSUPPORT] = 0.5

Units: Year

It's assumed that it takes 2 years on average to advance from Rookie to being an experienced employee for engineers and 6 months for a customer support person.

Uses:

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

assimilation_rate - Rookies that gain sufficient experience become Experienced Employees.

 

authorized_staff[company,department] = Staffing_Target[company, department] * effect_of_liquidity_on_staff[company]

Units: People

A liquidity crunch can reduce the authorized headcount below the target needed to staff the firm's operations.

Uses:

desired_hire_rate - Desired hiring is the sum of replacement hiring (to replace quits) and a fraction of the gap between the authorized and actual headcount. Labor flows are active only after the firm begins operations. Note that we assume quits are replaced immediately. this is an a fortiori assumption in that modeling the delay in recognizing quits and filling vacancies would limit staff further during rapid growth, working against the GBF strategy.

 

AVERAGE_LIFE_OF_VESTED_OPTIONS[company] = 5

Units: years

The average life of a vested option.

Uses:

vested_options_reaching_expiration_date - The rate at which vested options reach their expiration date depends on the number of options and their average life.

 

average_productivity[company,department] = ZIDZ(ftes_available_for_work[company, department], total_staff_per_department[company, department])

Units: Fte/person

Average productivity is measured by comparing the available FTEs to the headcount. It will always be below the one because of lower productivity of rookies as well as time spend for recruiting and training. Set to zero if no employees.

Uses:

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

 

average_strike_price_of_non_vested_options[company,department] = ZIDZ(Total_Basis_Of_Non_Vested_Options[company, department], Non_Vested_Employee_Options[company, department])

Units: $/share

The average basis cost of nonvested options is the total of all strike prices divided by the number of non vested options outstanding. Set to zero if there are no non vested options.

Uses:

expected_per_share_option_value - The per share value of the non vested options of each employee is a function of the difference between the expected share price and the average strike price of their non vested options. The function represents the subjective valuation, in the minds of employees, of the option value (roughly the Black—Scholes value but potentially biased by employee optimism about future share value or volatility.

fractional_option_value - The current average of non vested options relative to the average strike price. Zero if no options are issued.

indicated_repricing_of_non_vested_options - If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

total_basis_of_options_expiring - Options expiring reduce the total basis cost of all non vested options by the average strike price.

total_strike_price_of_options_vesting - Options vesting are assumed to be priced at the average strike price for non vested options.

 

average_strike_price_of_vested_options[company,department] = ZIDZ(Total_Basis_Of_Vested_Options[company, department], Vested_Employee_Options[company, department])

Units: $/share

The average strike price of vested options is the total of all strike prices divided by the number of vested options outstanding. Set to zero if there are no vested options.

Uses:

fraction_of_options_exercised - Options are exercised only if they are in the money.

indicated_repricing_of_vested_options - If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

total_basis_of_options_exercised - Options are exercised by employees at the average strike price for all vested options.

total_basis_of_vested_options_expiring - The total basis cost per year of the vested options that expire.

 

Average_Workweek[company,department] = INTEG(change_in_average_workweek[company, department], NORMAL_WORKWEEK)

Units: hours/week

The recent average workweek, used to indicate fatigue and burnout due to sustained high work hours.

Uses:

change_in_average_workweek - The average workweek is an exponential moving average of the work week. Active only after the firm begins operations.

effect_of_lifestyle_on_productivity - Effect of recent workweek on employee productivity.

effect_of_lifestyle_on_quits - Sustained long hours lead to burnout and a higher fractional quit rate.

 

change_in_average_workweek[company,department] = company_in_operation_switch[company] * (current_workweek[company, department] - Average_Workweek[company, department]) /WORKER_BURNOUT_TIME

Units: hours/(Year*week)

The average workweek is an exponential moving average of the work week. Active only after the firm begins operations.

Uses:

Average_Workweek - The recent average workweek, used to indicate fatigue and burnout due to sustained high work hours.

 

change_in_staffing_target[company,department] = (required_staff[company, department] - Staffing_Target[company, department]) /HR_DECISIONMAKING_DELAY

Units: People/Year

The staffing target is adjusted based on the decision making delay in the human resource department.

Uses:

Staffing_Target - The firm's current authorized staff target. Adjusts with a delay to the required number, representing the time required for administrative and planning processes.

 

current_workweek[company,department] = FUNCTION_FOR_WORKWEEK(schedule_pressure[company, department])

Units: hours/week

The workweek is determined by schedule pressure, which is the ratio of the staff needed in a given department to the staff available in that department. Workweek is a nonlinear function of schedule pressure.

Uses:

change_in_average_workweek - The average workweek is an exponential moving average of the work week. Active only after the firm begins operations.

relative_workweek - The ratio of the current workweek to normal, used to affect the net effort provided and the adequacy of customer service and site operations.

 

customer_support_salary_cost[company] = (Experienced_Employees[company, CUSTSUPPORT] * SALARY_FOR_EXPERIENCED[company, CUSTSUPPORT] + Rookie_Employees[company, CUSTSUPPORT] * salary_for_rookie[company, CUSTSUPPORT]) * company_in_operation_switch[company]

Units: $/Year

This calculates all costs for salaries for Customer Support personnel.

Uses:

cost_per_customer_contact - The average cost per customer contact. Pureplay eretailers incur average costs of $6 per customer contact. Multi channel retailers with existing call centers and experienced staff only incur $1.70 per call. ((If replaced by email: $3.80 for manual, $0.25 for automated execution)). (Shop.org)

marketing_and_sales - Marketing and sales expense consists of marketing spending plus the costs of customer support and inventory.

salary_expense - This calculates all salary expenses of the company.

 

desired_hire_rate[company,department] = company_in_operation_switch[company] * (total_quit_rate[company, department] + (authorized_staff[company, department] - total_staff_per_department[company, department]) /HIRING_DELAY[company, department])

Units: People/Year

Desired hiring is the sum of replacement hiring (to replace quits) and a fraction of the gap between the authorized and actual headcount. Labor flows are active only after the firm begins operations.  Note that we assume quits are replaced immediately.  this is an a fortiori assumption in that modeling the delay in recognizing quits and filling vacancies would limit staff further during rapid growth, working against the GBF strategy.

Uses:

desired_layoff_rate - The desired layoff rate is the magnitude of the desired layoff rate whenever that rate is less than zero. The Willingness to Lay Off indicates how responsive the firm is to layoff excess workers (0 equals no layoffs; 1 is just as willing to lay off as to hire).

rookie_hire_rate - Hiring normally equals the desired hire rate, but must be nonnegative.

 

desired_layoff_rate[company,department] = company_in_operation_switch[company] * WILLINGNESS_TO_LAY_OFF * MAX(0, - desired_hire_rate[company, department])

Units: People/Year

The desired layoff rate is the magnitude of the desired layoff rate whenever that rate is less than zero. The Willingness to Lay Off indicates how responsive the firm is to layoff excess workers (0 equals no layoffs; 1 is just as willing to lay off as to hire).

Uses:

experienced_layoff_rate - Layoffs, if necessary, occur in reverse seniority order. Hence layoffs are the smaller of the maximum rate at which experienced people can be laid off (based on the time required to carry out a force reduction) or the difference between the desired total rate of layoffs and the rate of rookie layoffs. This difference will be zero if all needed layoffs are accommodated by firing rookies, and will be positive if the rate of rookie layoff is not sufficient. It cannot be negative since rookie layoffs will be at most the total desired layoff rate.

rookie_layoff_rate - Layoffs of rookies occur at the desired rate or maximum rate, whichever is less.

 

discount_rate_for_total_compensation[company] = NORMAL_DISCOUNT_RATE_FOR_COMPENSATION + expected_layoff_or_failure_hazard_rate[company]

Units: 1/Year

The discount rate used to value the NPV of total compensation. Assumes a normal discount rate to capture the time value of money and a risk premium based on the probability of being laid off or of the firm failing.

Uses:

expected_present_value_of_salary - The present value of the employee's salary, computed assuming employees will be paid the salary for the experienced workers, and discounted at a specified rate. Used to determine the total present value of the employee compensation package, including salary and options.

expected_present_value_of_stock_options - The present value of the average employee's non vested option holdings. Discounted at a specified rate over the vesting period: the higher the discount rate or longer the vesting period, the lower the present value of the options held.

 

effect_of_financial_reward_on_quits[company,department] = FUNCTION_FOR_EFFECT_OF_FINANCIAL_REWARD_ON_QUITS(expected_total_compensation_relative_to_reference[company, department])

Units: dimensionless

The financial attractiveness of the job is driven by total expected employee compensation relative to a reference or aspiration value. The lower the value of total compensation relative to the aspiration level, the greater the quit fraction.

Uses:

effect_of_job_attractiveness_on_quits - Job Attractiveness is influenced both by the intensity of the workweek and by the financial attractiveness of the job.

 

effect_of_job_attractiveness_on_quits[company,department] = effect_of_financial_reward_on_quits[company, department] * effect_of_lifestyle_on_quits[company, department]

Units: dimensionless

Job Attractiveness is influenced both by the intensity of the workweek and by the financial attractiveness of the job.

Uses:

experienced_quit_fraction - The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the company begins operations.

rookie_quit_fraction - The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the firm begins operations.

 

effect_of_lifestyle_on_quits[company,department] = FUNCTION_FOR_EFFECT_OF_LIFESTYLE_ON_QUITS(Average_Workweek[company, department])

Units: dimensionless

Sustained long hours lead to burnout and a higher fractional quit rate.

Uses:

effect_of_job_attractiveness_on_quits - Job Attractiveness is influenced both by the intensity of the workweek and by the financial attractiveness of the job.

 

effect_of_liquidity_on_staff[company] = FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_STAFF(perceived_liquidity[company])

Units: dimensionless

The effect of liquidity on staff reduces the authorized headcount when the firm's cash is low.

Uses:

authorized_staff - A liquidity crunch can reduce the authorized headcount below the target needed to staff the firm's operations.

 

engineering_salary_costs[company] = (Experienced_Employees[company, ENGIN] * SALARY_FOR_EXPERIENCED[company, ENGIN] + Rookie_Employees[company, ENGIN] * salary_for_rookie[company, ENGIN]) * company_in_operation_switch[company]

Units: $/Year

This variable calculates the total salary expense for engineering employees.

Uses:

cost_per_pageview - The average cost per pageview is the ratio of the sum of engineering and server infrastructure costs to total pageviews.

product_development - Product development costs include the cost of content development and the fraction of server infrastructure and engineering workforce costs devoted to new product and new technology development.

salary_expense - This calculates all salary expenses of the company.

 

expected_growth_in_transactions[company] = SMOOTHI(indicated_growth_in_transactions[company], TIME_TO_ADJUST_TRANSACTIONS_GROWTH_EXPECTATIONS, INITIAL_EXPECTED_TRANSACTIONS_GROWTH[company])

Units: dimensionless/Year

The expected fractional growth rate in transactions adjusts exponentially to the indicated rate.

Uses:

planned_growth_in_transactions - The firm plans to grow at the expected growth rate in transactions, but not more than some maximum rate, to prevent overreaction to temporary growth bursts.

 

expected_layoff_or_failure_hazard_rate[company] = NORMAL_LAYOFF_OR_FAILURE_HAZARD_RATE/perceived_liquidity[company]

Units: 1/Year

The hazard rate (per year) that the firm will fail or lay off its employees. Rises as perceived liquidity falls. For simplicity we assume the annual hazard rate of failure is a normal rate divided by perceived liquidity, that is, the hazard rises in inverse proportion to liquidity.

Uses:

discount_rate_for_total_compensation - The discount rate used to value the NPV of total compensation. Assumes a normal discount rate to capture the time value of money and a risk premium based on the probability of being laid off or of the firm failing.

 

expected_per_share_option_value[company,department] = average_strike_price_of_non_vested_options[company, department] * option_value_as_fraction_of_strike_price[company, department]

Units: $/share

The per share value of the non vested options of each employee is a function of the difference between the expected share price and the average strike price of their non vested options. The function represents the subjective valuation, in the minds of employees, of the option value (roughly the Black—Scholes value but potentially biased by employee optimism about future share value or volatility.

Uses:

expected_value_of_non_vested_stock_options - This variable calculated the value of a typical employees non vested options if they were converted today. Only the value of non vested options matters to the quit decision since those with vested options can exercise them even after they leave the firm.

 

expected_present_value_of_salary[company,department] = SALARY_FOR_EXPERIENCED[company, department]/discount_rate_for_total_compensation[company]

Units: $/person

The present value of the employee's salary, computed assuming employees will be paid the salary for the experienced workers, and discounted at a specified rate. Used to determine the total present value of the employee compensation package, including salary and options.

Uses:

expected_present_value_of_total_compensation - The expected present value of total employee compensation is the EPV of the salary component plus the EPV of the option component.

 

expected_present_value_of_stock_options[company,department] = expected_value_of_non_vested_stock_options[company, department] * EXP( - discount_rate_for_total_compensation[company] * VESTING_PERIOD[company, department])

Units: $/person

The present value of the average employee's non vested option holdings. Discounted at a specified rate over the vesting period: the higher the discount rate or longer the vesting period, the lower the present value of the options held.

Uses:

expected_present_value_of_total_compensation - The expected present value of total employee compensation is the EPV of the salary component plus the EPV of the option component.

 

expected_present_value_of_total_compensation[company,department] = expected_present_value_of_salary[company, department] + expected_present_value_of_stock_options[company, department]

Units: $/person

The expected present value of total employee compensation is the EPV of the salary component plus the EPV of the option component.

Uses:

expected_total_compensation_relative_to_reference - The ratio of the expected present value of total compensation to the reference level.

 

expected_productivity[company,department] = SMOOTHI(average_productivity[company, department], TIME_TO_PERCEIVE_PRODUCTIVITY, (Experienced_Employees[company, department] * FTES_PER_EXPERIENCED[company, department] + (FTES_PER_ROOKIE[company, department] - FTES_REQUIRED_FOR_TRAINING_PER_ROOKIE[company, department]) * Rookie_Employees[company, department]) /(Experienced_Employees[company, department] + Rookie_Employees[company, department]) )

Units: Fte/person

The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

Uses:

required_staff - The number of employees the firm requires is based on the number needed currently, and adjusted by the growth expected between the current time and the time at which the positions are likely to be filled. Not less than the initial number of employees.

 

expected_stock_price[company] = SMOOTH(stock_price[company], TIME_FOR_ADJUST_EXPECTATIONS_FOR_STOCK_PRICE)

Units: $/share

Employees' expectations about the future stock price, which are used here to affect their decision to remain with the firm or quit, adjust slowly to the actual price (the decision to quit is not based on short term changes in share values).

Uses:

fractional_option_value - The current average of non vested options relative to the average strike price. Zero if no options are issued.

 

expected_total_compensation_relative_to_reference[company,department] = expected_present_value_of_total_compensation[company, department]/reference_present_value_of_total_compensation[department]

Units: dimensionless

The ratio of the expected present value of total compensation to the reference level.

Uses:

effect_of_financial_reward_on_quits - The financial attractiveness of the job is driven by total expected employee compensation relative to a reference or aspiration value. The lower the value of total compensation relative to the aspiration level, the greater the quit fraction.

 

expected_value_of_non_vested_stock_options[company,department] = expected_per_share_option_value[company, department] * non_vested_options_per_employee[company, department]

Units: $/person

This variable calculated the value of a typical employees non vested options if they were converted today. Only the value of non vested options matters to the quit decision since those with vested options can exercise them even after they leave the firm.

Uses:

expected_present_value_of_stock_options - The present value of the average employee's non vested option holdings. Discounted at a specified rate over the vesting period: the higher the discount rate or longer the vesting period, the lower the present value of the options held.

 

Experienced_Employees[company,department] = INTEG(assimilation_rate[company, department] - experienced_quit_rate[company, department] - experienced_layoff_rate[company, department], INITIAL_EXPERIENCED_EMPLOYEES[company, department])

Units: People

The number of experienced employees. Increased by assimilation of inexperienced employees into the experienced ranks and decreased by attrition and layoffs.

Uses:

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

customer_support_salary_cost - This calculates all costs for salaries for Customer Support personnel.

engineering_salary_costs - This variable calculates the total salary expense for engineering employees.

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

experienced_quit_rate - Experienced workers leave at a specified fractional rate.

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

maximum_experienced_layoff_rate - Layoffs cannot proceed faster than the minimum time required to give notice and carry out a force reduction.

total_staff_per_department - The total number of staff in a given department, including experienced and inexperienced.

 

experienced_layoff_rate[company,department] = MIN(maximum_experienced_layoff_rate[company, department], desired_layoff_rate[company, department] - rookie_layoff_rate[company, department])

Units: People/Year

Layoffs, if necessary, occur in reverse seniority order. Hence layoffs are the smaller of the maximum rate at which experienced people can be laid off (based on the time required to carry out a force reduction) or the difference between the desired total rate of layoffs and the rate of rookie layoffs. This difference will be zero if all needed layoffs are accommodated by firing rookies, and will be positive if the rate of rookie layoff is not sufficient. It cannot be negative since rookie layoffs will be at most the total desired layoff rate.

Uses:

Experienced_Employees - The number of experienced employees. Increased by assimilation of inexperienced employees into the experienced ranks and decreased by attrition and layoffs.

 

experienced_quit_fraction[company,department] = company_in_operation_switch[company] * NORMAL_QUIT_FRACTION[company, department] * effect_of_job_attractiveness_on_quits[company, department]

Units: 1/Year

The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the company begins operations.

Uses:

experienced_quit_rate - Experienced workers leave at a specified fractional rate.

 

experienced_quit_rate[company,department] = Experienced_Employees[company, department] * experienced_quit_fraction[company, department]

Units: People/Year

Experienced workers leave at a specified fractional rate.

Uses:

Experienced_Employees - The number of experienced employees. Increased by assimilation of inexperienced employees into the experienced ranks and decreased by attrition and layoffs.

total_quit_rate - The total quit rate is the sum of Rookies and Experienced Employees leaving the firm, by department.

 

FRACTION_OF_EXPERIENCED_COMPENSATION_FOR_ROOKIES = 0.33

Units: dimensionless

The fraction of the compensation of an experienced employee paid to a new hire.

Uses:

salary_for_rookie - Rookie employees earn a specified fraction of the compensation for experienced employees.

 

fraction_of_options_exercised[company,department] = IF_THEN_ELSE(stock_price[company]>average_strike_price_of_vested_options[company, department], 1, 0)

Units: dimensionless

Options are exercised only if they are in the money.

Uses:

options_exercised - Employees exercise a fraction of their vested options approaching their expiration date.

vested_options_expiring - Vested options reaching their expiration date that employees choose not to exercise expire.

 

fraction_of_vested_options[company,department] = ZIDZ(Vested_Employee_Options[company, department], Non_Vested_Employee_Options[company, department] + Vested_Employee_Options[company, department])

Units: dimensionless

The fraction of non vested options among all outstanding options. Zero if there are no options.

 

fractional_option_value[company,department] = ZIDZ((expected_stock_price[company] - average_strike_price_of_non_vested_options[company, department]) , average_strike_price_of_non_vested_options[company, department])

Units: dimensionless

The current average of non vested options relative to the average strike price. Zero if no options are issued.

Uses:

option_value_as_fraction_of_strike_price - The option value (relative to the average strike price of the non vested options outstanding) is a function of the difference between the current stock price and the strike price. This function represents the employee's subjective valuation of the options, and roughly follows the Black—Scholes concept.

 

ftes_available_for_work[company,department] = MAX(0, Experienced_Employees[company, department] * FTES_PER_EXPERIENCED[company, department] * effect_of_lifestyle_on_productivity[company, department] + Rookie_Employees[company, department] * FTES_PER_ROOKIE[company, department] * effect_of_lifestyle_on_productivity[company, department] - ftes_to_recruiting[company, department] - ftes_to_training[company, department])

Units: Fte

The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

Uses:

adequacy_of_customer_support_staff - The adequacy of staffing is the ratio of the staff available for work, adjusted by the relative workweek to reflect overtime, to the staff required for operations. Set to neutral prior to operations and zero if no staff are required.

adequacy_of_technical_staff - The adequacy of technical staff is the ratio of the staff available, including the effect of overtime, to the staff required. Adequacy is neutral prior to operations and zero if required staff is zero.

average_productivity - Average productivity is measured by comparing the available FTEs to the headcount. It will always be below the one because of lower productivity of rookies as well as time spend for recruiting and training. Set to zero if no employees.

schedule_pressure - The ratio of the staff required for customer service or site operations relative to the net experienced FTEs available. Drives the workweek.

 

FTES_PER_EXPERIENCED[company,department] = 1

Units: Fte/person

Experienced employees operate at full productivity.

Uses:

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

 

FTES_PER_ROOKIE[company,ENGIN] = 0.15

FTES_PER_ROOKIE[company,CUSTSUPPORT] = 0.25

Units: Fte/person

This constant determines the productivity of a rookie relative to an experienced worker. It is assumed lower for an engineering rookie than for a rookie in customer service.

Uses:

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

 

FTES_REQUIRED_FOR_SELECTION_PER_HIRE[company,department] = 0.01

Units: Year*Fte/person

Fraction of time from an experienced person required to interview and select employees through the hiring process. This is the net result, i.e. time per person hired.

Uses:

ftes_to_recruiting - The recruiting burden borne by experienced workers is proportional to the hiring rate.

 

FTES_REQUIRED_FOR_TRAINING_PER_ROOKIE[company,department] = 0.05

Units: Fte/person

Fraction of time experienced employees devote to supervising/training/mentoring rookie employees (for the duration of the assimilation period).

Uses:

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

ftes_to_training - The training burden borne by experienced workers is proportional to the number of inexperienced workers.

 

ftes_to_recruiting[company,department] = FTES_REQUIRED_FOR_SELECTION_PER_HIRE[company, department] * rookie_hire_rate[company, department]

Units: Fte

The recruiting burden borne by experienced workers is proportional to the hiring rate.

Uses:

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

 

ftes_to_training[company,department] = FTES_REQUIRED_FOR_TRAINING_PER_ROOKIE[company, department] * Rookie_Employees[company, department]

Units: Fte

The training burden borne by experienced workers is proportional to the number of inexperienced workers.

Uses:

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

 

FUNCTION_FOR_EFFECT_OF_FINANCIAL_REWARD_ON_QUITS([(0,0)-(5,5)],(0,4),(0.25,1.8),(0.5,1.3),(1,1),(2,0.8),(5,0.4))

Units: dimensionless

Turnover depends on the value of the employee's non vested options, relative to a reference value representing the value they expect (to compensate them for lower—than—market salaries). The higher the value of the non vested options relative to the reference, the lower the quit fraction; as the value of the options drops below the reference the quit fraction rises strongly.

Uses:

effect_of_financial_reward_on_quits - The financial attractiveness of the job is driven by total expected employee compensation relative to a reference or aspiration value. The lower the value of total compensation relative to the aspiration level, the greater the quit fraction.

 

FUNCTION_FOR_EFFECT_OF_LIFESTYLE_ON_QUITS([(0,0)-(160,8)],(20,0.8),(40,1),(60,1.3),(80,1.8),(100,3),(120,6))

Units: dimensionless

As the average workweek over a long period rises, people grow increasingly dissatisfied and quit at higher fractional rates.

Uses:

effect_of_lifestyle_on_quits - Sustained long hours lead to burnout and a higher fractional quit rate.

 

FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_STAFF([(0,0)-(1,1)],(0,0),(0.2,0.6),(0.4,0.8),(0.6,0.95),(0.8,1),(1,1),(1000,1))

Units: dimensionless

As liquidity drops, the firm cuts its headcount target. The effect is weak for modest liquidity problems, but progressively stronger as cash runs out.

Uses:

effect_of_liquidity_on_staff - The effect of liquidity on staff reduces the authorized headcount when the firm's cash is low.

 

FUNCTION_FOR_EXPECTED_OPTION_VALUE([(-1,0)-(2,2)],(-1,0),(-0.5,0.05),(0,0.25),(0.5,0.6),(1,1),(2,2),(100,100))

Units: dimensionless

Function for the subjective valuation by employees of their stock options. When stock options are in the money, employees value them close to the current value. As they begin to go underwater, the subjective value gradually declines to zero.

Uses:

option_value_as_fraction_of_strike_price - The option value (relative to the average strike price of the non vested options outstanding) is a function of the difference between the current stock price and the strike price. This function represents the employee's subjective valuation of the options, and roughly follows the Black—Scholes concept.

 

FUNCTION_FOR_WORKWEEK([(0,0)-(3,80)],(0,30),(0.25,32),(0.5,34),(0.75,36),(1,40),(1.25,47),(1.5,53),(1.75,58),(2,62),(2.25,65),(2.5,67),(2.75,69),(3,70),(10,70))

Units: hours/week

The workweek as it depends on schedule pressure. There are minimum and maximum limits on the workweek.

Uses:

current_workweek - The workweek is determined by schedule pressure, which is the ratio of the staff needed in a given department to the staff available in that department. Workweek is a nonlinear function of schedule pressure.

 

HIRING_DELAY[company,ENGIN] = 0.25

HIRING_DELAY[company,CUSTSUPPORT] = 0.167

Units: years

The average time it takes to hire a rookie in engineering and in customer support.

Uses:

adjustment_for_growth_during_hiring_delay - The growth adjustment is calculated such that it covers the growth during the period that it takes to hire the people according to the hiring plan.

desired_hire_rate - Desired hiring is the sum of replacement hiring (to replace quits) and a fraction of the gap between the authorized and actual headcount. Labor flows are active only after the firm begins operations. Note that we assume quits are replaced immediately. this is an a fortiori assumption in that modeling the delay in recognizing quits and filling vacancies would limit staff further during rapid growth, working against the GBF strategy.

 

HISTORIC_HORIZON_FOR_TRANSACTIONS_GROWTH = 2

Units: Year

The historic horizon for the estimation of future growth in transactions volume.

Uses:

historic_transactions - The historic transactions volume used to estimate future growth is formed by exponential smoothing of recent transactions. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

indicated_growth_in_transactions - The indicated growth rate in transactions is the annualized fractional difference between recent and historic transactions. Set to zero if historic transactions is zero.

 

historic_transactions[company] = SMOOTHI(recent_transactions[company], HISTORIC_HORIZON_FOR_TRANSACTIONS_GROWTH, recent_transactions[company]/(1 + INITIAL_EXPECTED_TRANSACTIONS_GROWTH[company] * HISTORIC_HORIZON_FOR_TRANSACTIONS_GROWTH) )

Units: transactions/Year

The historic transactions volume used to estimate future growth is formed by exponential smoothing of recent transactions. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

Uses:

indicated_growth_in_transactions - The indicated growth rate in transactions is the annualized fractional difference between recent and historic transactions. Set to zero if historic transactions is zero.

 

HR_DECISIONMAKING_DELAY = 0.083

Units: years

The average administrative and processing delay for staffing targets.

Uses:

change_in_staffing_target - The staffing target is adjusted based on the decision making delay in the human resource department.

 

indicated_growth_in_transactions[company] = ZIDZ((recent_transactions[company] - historic_transactions[company]) , (historic_transactions[company] * HISTORIC_HORIZON_FOR_TRANSACTIONS_GROWTH) )

Units: dimensionless/Year

The indicated growth rate in transactions is the annualized fractional difference between recent and historic transactions. Set to zero if historic transactions is zero.

Uses:

expected_growth_in_transactions - The expected fractional growth rate in transactions adjusts exponentially to the indicated rate.

 

indicated_repricing_of_non_vested_options[company,department] = MAX(0, average_strike_price_of_non_vested_options[company, department] - stock_price[company]) /TIME_TO_REPRICE_OPTIONS

Units: $/(Year*share)

If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

Uses:

repricing_of_non_vested_options - If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

 

indicated_repricing_of_vested_options[company,department] = MAX(0, average_strike_price_of_vested_options[company, department] - stock_price[company]) /TIME_TO_REPRICE_OPTIONS

Units: $/(Year*share)

If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

Uses:

repricing_of_vested_options - If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

 

INITIAL_EXPECTED_TRANSACTIONS_GROWTH[company] = 0

Units: 1/Year

The initial expectation for transactions growth for the firm.

Uses:

expected_growth_in_transactions - The expected fractional growth rate in transactions adjusts exponentially to the indicated rate.

historic_transactions - The historic transactions volume used to estimate future growth is formed by exponential smoothing of recent transactions. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

recent_transactions - Recent transactions averages transactions volume over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

 

INITIAL_STAFF[company,department] = INITIAL(total_staff_per_department[company, department])

Units: People

The initial staff of the firm, by department.

Uses:

required_staff - The number of employees the firm requires is based on the number needed currently, and adjusted by the growth expected between the current time and the time at which the positions are likely to be filled. Not less than the initial number of employees.

 

maximum_experienced_layoff_rate[company,department] = Experienced_Employees[company, department]/MINIMUM_LAYOFF_TIME

Units: People/Year

Layoffs cannot proceed faster than the minimum time required to give notice and carry out a force reduction.

Uses:

experienced_layoff_rate - Layoffs, if necessary, occur in reverse seniority order. Hence layoffs are the smaller of the maximum rate at which experienced people can be laid off (based on the time required to carry out a force reduction) or the difference between the desired total rate of layoffs and the rate of rookie layoffs. This difference will be zero if all needed layoffs are accommodated by firing rookies, and will be positive if the rate of rookie layoff is not sufficient. It cannot be negative since rookie layoffs will be at most the total desired layoff rate.

 

MAXIMUM_PLANNED_TRANSACTIONS_GROWTH_RATE = 2.5

Units: dimensionless/Year

The maximum planned growth in transactions the firm is willing to plan for, to avoid overreactions to a temporarily high growth rate.

Uses:

planned_growth_in_transactions - The firm plans to grow at the expected growth rate in transactions, but not more than some maximum rate, to prevent overreaction to temporary growth bursts.

 

maximum_rookie_layoff_rate[company,department] = Rookie_Employees[company, department]/MINIMUM_LAYOFF_TIME

Units: People/Year

Layoffs cannot proceed faster than the minimum time required to give notice and carry out a force reduction.

Uses:

rookie_layoff_rate - Layoffs of rookies occur at the desired rate or maximum rate, whichever is less.

 

MINIMUM_LAYOFF_TIME = 0.08333

Units: Year

The minimum time required to carry out a layoff program, including required notice and administrative delays.

Uses:

maximum_experienced_layoff_rate - Layoffs cannot proceed faster than the minimum time required to give notice and carry out a force reduction.

maximum_rookie_layoff_rate - Layoffs cannot proceed faster than the minimum time required to give notice and carry out a force reduction.

 

Non_Vested_Employee_Options[company,department] = INTEG(options_awarded[company, department] - options_vesting[company, department] - non_vested_options_expiring[company, department], (total_staff_per_department[company, department]) * options_granted_per_hire[company, department])

Units: shares

The total number of non vested options held by employees. Increases as options are awarded; decreases as options vest or expire on the attrition of employees.

Uses:

average_strike_price_of_non_vested_options - The average basis cost of nonvested options is the total of all strike prices divided by the number of non vested options outstanding. Set to zero if there are no non vested options.

fraction_of_vested_options - The fraction of non vested options among all outstanding options. Zero if there are no options.

non_vested_options_per_employee - Average non vested options per employee is the ratio of total non vested employees to employees (by department).

options_vesting - Options vest over an average vesting period. Options vest only if the company is in operation.

repricing_of_non_vested_options - If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

total_employee_options - The sum of the options, vested and non vested, held by employees of all types.

 

non_vested_options_expiring[company,department] = non_vested_options_per_employee[company, department] * total_quit_rate[company, department]

Units: shares/Year

Non vested options expire when the employees holding them leave the firm. Each employee leaving reduces the stock of non vested options by the average number of non vested options per employee.

Uses:

Non_Vested_Employee_Options - The total number of non vested options held by employees. Increases as options are awarded; decreases as options vest or expire on the attrition of employees.

total_basis_of_options_expiring - Options expiring reduce the total basis cost of all non vested options by the average strike price.

 

non_vested_options_per_employee[company,department] = Non_Vested_Employee_Options[company, department]/total_staff_per_department[company, department]

Units: shares/person

Average non vested options per employee is the ratio of total non vested employees to employees (by department).

Uses:

expected_value_of_non_vested_stock_options - This variable calculated the value of a typical employees non vested options if they were converted today. Only the value of non vested options matters to the quit decision since those with vested options can exercise them even after they leave the firm.

non_vested_options_expiring - Non vested options expire when the employees holding them leave the firm. Each employee leaving reduces the stock of non vested options by the average number of non vested options per employee.

 

NORMAL_DISCOUNT_RATE_FOR_COMPENSATION = 0.05

Units: 1/Year

The normal discount rate for total compensation represents the time value of money.

Uses:

discount_rate_for_total_compensation - The discount rate used to value the NPV of total compensation. Assumes a normal discount rate to capture the time value of money and a risk premium based on the probability of being laid off or of the firm failing.

reference_present_value_of_total_compensation - The reference level for the expected present value of total compensation. Represents the employees' aspiration for the present value of their salary and non vested options. Computed as the NPV of the reference total annual compensation employees desire, discounted at a rate that measures the time value of money plus the normal probability of layoff or business failure people assess.

 

NORMAL_LAYOFF_OR_FAILURE_HAZARD_RATE = 0.1

Units: 1/Year

The normal hazard rate of layoff or business failure, per year.

Uses:

expected_layoff_or_failure_hazard_rate - The hazard rate (per year) that the firm will fail or lay off its employees. Rises as perceived liquidity falls. For simplicity we assume the annual hazard rate of failure is a normal rate divided by perceived liquidity, that is, the hazard rises in inverse proportion to liquidity.

reference_present_value_of_total_compensation - The reference level for the expected present value of total compensation. Represents the employees' aspiration for the present value of their salary and non vested options. Computed as the NPV of the reference total annual compensation employees desire, discounted at a rate that measures the time value of money plus the normal probability of layoff or business failure people assess.

 

NORMAL_QUIT_FRACTION[company,ENGIN] = 0.2

NORMAL_QUIT_FRACTION[company,CUSTSUPPORT] = 0.4

Units: 1/Year

The Normal Quit Fraction is assumed to be 20% for engineers and 40% for customer support people.

Uses:

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

experienced_quit_fraction - The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the company begins operations.

rookie_quit_fraction - The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the firm begins operations.

 

OPTION_PRICE_RELATIVE_TO_SHARE_PRICE = 1

Units: dimensionless

The ratio of the option strike price to the current share price. Options are issued at par (100% of the current share price).

Uses:

strike_price_of_new_options - Options are issued with a strike price set at a specified ratio to the current stock price.

 

option_value_as_fraction_of_strike_price[company,department] = FUNCTION_FOR_EXPECTED_OPTION_VALUE(fractional_option_value[company, department])

Units: dimensionless

The option value (relative to the average strike price of the non vested options outstanding) is a function of the difference between the current stock price and the strike price. This function represents the employee's subjective valuation of the options, and roughly follows the Black—Scholes concept.

Uses:

expected_per_share_option_value - The per share value of the non vested options of each employee is a function of the difference between the expected share price and the average strike price of their non vested options. The function represents the subjective valuation, in the minds of employees, of the option value (roughly the Black—Scholes value but potentially biased by employee optimism about future share value or volatility.

 

options_as_a_fraction_of_shares_outstanding[company] = ZIDZ(total_employee_options[company], Shares_Outstanding[company])

Units: dimensionless

The number of options held by employees as a fraction of the total number of existing shares. Zero prior to entry.

 

options_awarded[company,department] = options_awarded_to_new_hires[company, department] + options_awarded_to_existing_employees[company, department]

Units: shares/Year

Options are awarded to each new hire and, potentially, to each continuing employee.

Uses:

Non_Vested_Employee_Options - The total number of non vested options held by employees. Increases as options are awarded; decreases as options vest or expire on the attrition of employees.

total_basis_of_new_options - The total basis cost of all non vested options increases by the product of the strike price of each option and the rate at which options are issued.

 

options_awarded_to_existing_employees[company,department] = options_granted_per_existing_employee[company, department] * total_staff_per_department[company, department]

Units: shares/Year

Each employee receives a certain grant of options each year.

Uses:

options_awarded - Options are awarded to each new hire and, potentially, to each continuing employee.

 

options_awarded_to_new_hires[company,department] = options_granted_per_hire[company, department] * rookie_hire_rate[company, department]

Units: shares/Year

Each new hire receives a certain number of options.

Uses:

options_awarded - Options are awarded to each new hire and, potentially, to each continuing employee.

 

options_exercised[company,department] = fraction_of_options_exercised[company, department] * vested_options_reaching_expiration_date[company, department]

Units: shares/Year

Employees exercise a fraction of their vested options approaching their expiration date.

Uses:

Vested_Employee_Options - The number of vested options increases as non vested options vest and decreases when these options are exercised or expire.

shares_to_employees_from_option_exercise - The number of shares outstanding increases with the sum of the options exercised by all types of employees.

total_basis_of_options_exercised - Options are exercised by employees at the average strike price for all vested options.

 

options_granted_per_existing_employee[company,department] = ZIDZ(TARGET_VALUE_OF_NEW_OPTIONS_FOR_EXISTING_EMPLOYEES[company, department], stock_price[company])

Units: shares/(Year*person)

Existing employees should receive options worth the Target Value. The current share price is used to determine the number of shares awarded. Zero if shares have no value.

Uses:

options_awarded_to_existing_employees - Each employee receives a certain grant of options each year.

 

options_granted_per_hire[company,department] = ZIDZ(TARGET_VALUE_OF_OPTIONS_FOR_NEW_HIRES[company, department], stock_price[company])

Units: shares/person

Each new hire should receive options worth the Target Value. The current share price is used to determine the number of shares awarded. Zero if the share price is zero.

Uses:

Non_Vested_Employee_Options - The total number of non vested options held by employees. Increases as options are awarded; decreases as options vest or expire on the attrition of employees.

options_awarded_to_new_hires - Each new hire receives a certain number of options.

 

options_vesting[company,department] = (Non_Vested_Employee_Options[company, department]/VESTING_PERIOD[company, department]) * company_in_operation_switch[company]

Units: shares/Year

Options vest over an average vesting period. Options vest only if the company is in operation.

Uses:

Non_Vested_Employee_Options - The total number of non vested options held by employees. Increases as options are awarded; decreases as options vest or expire on the attrition of employees.

Vested_Employee_Options - The number of vested options increases as non vested options vest and decreases when these options are exercised or expire.

total_strike_price_of_options_vesting - Options vesting are assumed to be priced at the average strike price for non vested options.

 

planned_growth_in_transactions[company] = MIN(expected_growth_in_transactions[company], MAXIMUM_PLANNED_TRANSACTIONS_GROWTH_RATE)

Units: dimensionless/Year

The firm plans to grow at the expected growth rate in transactions, but not more than some maximum rate, to prevent overreaction to temporary growth bursts.

Uses:

adjustment_for_growth_during_hiring_delay - The growth adjustment is calculated such that it covers the growth during the period that it takes to hire the people according to the hiring plan.

adjustment_for_growth_in_required_server_infrastructure - Investment in server infrastructure to account for the anticipated growth in demand. Depends on current server infrastructure and the expected growth rate.

 

recent_transactions[company] = SMOOTHI(total_transactions[company], TRANSACTION_REPORTING_TIME, total_transactions[company]/(1 + INITIAL_EXPECTED_TRANSACTIONS_GROWTH[company] * TRANSACTION_REPORTING_TIME) )

Units: transactions/Year

Recent transactions averages transactions volume over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

Uses:

historic_transactions - The historic transactions volume used to estimate future growth is formed by exponential smoothing of recent transactions. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

indicated_growth_in_transactions - The indicated growth rate in transactions is the annualized fractional difference between recent and historic transactions. Set to zero if historic transactions is zero.

 

reference_present_value_of_total_compensation[department] = REFERENCE_TOTAL_COMPENSATION[department]/(NORMAL_DISCOUNT_RATE_FOR_COMPENSATION + NORMAL_LAYOFF_OR_FAILURE_HAZARD_RATE)

Units: $/person

The reference level for the expected present value of total compensation. Represents the employees' aspiration for the present value of their salary and non vested options. Computed as the NPV of the reference total annual compensation employees desire, discounted at a rate that measures the time value of money plus the normal probability of layoff or business failure people assess.

Uses:

expected_total_compensation_relative_to_reference - The ratio of the expected present value of total compensation to the reference level.

 

REFERENCE_TOTAL_COMPENSATION[ENGIN] = 150000

REFERENCE_TOTAL_COMPENSATION[CUSTSUPPORT] = 75000

Units: $/(Year*person)

The annual value of total compensation employees expect to earn.

Uses:

reference_present_value_of_total_compensation - The reference level for the expected present value of total compensation. Represents the employees' aspiration for the present value of their salary and non vested options. Computed as the NPV of the reference total annual compensation employees desire, discounted at a rate that measures the time value of money plus the normal probability of layoff or business failure people assess.

 

repricing_of_non_vested_options[company,department] = SWITCH_TO_REPRICE_OPTIONS * indicated_repricing_of_non_vested_options[company, department] * Non_Vested_Employee_Options[company, department]

Units: $/Year

If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

Uses:

Total_Basis_Of_Non_Vested_Options - The total basis cost of all non vested options. The ratio of this stock to the number of non vested options outstanding is the average strike price of the non vested options. Increases as options are granted; decreases as options vest, expire, or are repriced.

 

repricing_of_vested_options[company,department] = SWITCH_TO_REPRICE_OPTIONS * indicated_repricing_of_vested_options[company, department] * Vested_Employee_Options[company, department]

Units: $/Year

If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

Uses:

Total_Basis_Of_Vested_Options - The total cost basis of all vested options. The ratio of this stock to the number of vested options outstanding is the average strike price of the vested options. Increases as options are vested; decreases as options are exercised or repriced.

 

required_staff[company,ENGIN] = MAX(INITIAL_STAFF[company, ENGIN], adjustment_for_growth_during_hiring_delay[company, ENGIN] * staff_required_for_site_operation[company]/expected_productivity[company, ENGIN])

required_staff[company,CUSTSUPPORT] = MAX(INITIAL_STAFF[company, CUSTSUPPORT], adjustment_for_growth_during_hiring_delay[company, CUSTSUPPORT] * staff_required_for_customer_support[company]/expected_productivity[company, CUSTSUPPORT])

Units: People

The number of employees the firm requires is based on the number needed currently, and adjusted by the growth expected between the current time and the time at which the positions are likely to be filled. Not less than the initial number of employees.

Uses:

Staffing_Target - The firm's current authorized staff target. Adjusts with a delay to the required number, representing the time required for administrative and planning processes.

change_in_staffing_target - The staffing target is adjusted based on the decision making delay in the human resource department.

 

Rookie_Employees[company,department] = INTEG(rookie_hire_rate[company, department] - assimilation_rate[company, department] - rookie_quit_rate[company, department] - rookie_layoff_rate[company, department], (Experienced_Employees[company, department] * (NORMAL_QUIT_FRACTION[company, department] * ASSIMILATION_TIME[company, department]) ) )

Units: People

The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

Uses:

assimilation_rate - Rookies that gain sufficient experience become Experienced Employees.

customer_support_salary_cost - This calculates all costs for salaries for Customer Support personnel.

engineering_salary_costs - This variable calculates the total salary expense for engineering employees.

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

ftes_to_training - The training burden borne by experienced workers is proportional to the number of inexperienced workers.

maximum_rookie_layoff_rate - Layoffs cannot proceed faster than the minimum time required to give notice and carry out a force reduction.

rookie_fraction - The Rookie Fraction measures the proportion of rookies among the workforce of a particular department.

rookie_quit_rate - Rookies quit at a specified fractional rate.

total_staff_per_department - The total number of staff in a given department, including experienced and inexperienced.

 

rookie_fraction[company,department] = Rookie_Employees[company, department]/total_staff_per_department[company, department]

Units: dimensionless

The Rookie Fraction measures the proportion of rookies among the workforce of a particular department.

 

rookie_hire_rate[company,department] = MAX(0, desired_hire_rate[company, department])

Units: People/Year

Hiring normally equals the desired hire rate, but must be nonnegative.

Uses:

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

ftes_to_recruiting - The recruiting burden borne by experienced workers is proportional to the hiring rate.

options_awarded_to_new_hires - Each new hire receives a certain number of options.

 

rookie_layoff_rate[company,department] = MIN(desired_layoff_rate[company, department], maximum_rookie_layoff_rate[company, department])

Units: People/Year

Layoffs of rookies occur at the desired rate or maximum rate, whichever is less.

Uses:

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

experienced_layoff_rate - Layoffs, if necessary, occur in reverse seniority order. Hence layoffs are the smaller of the maximum rate at which experienced people can be laid off (based on the time required to carry out a force reduction) or the difference between the desired total rate of layoffs and the rate of rookie layoffs. This difference will be zero if all needed layoffs are accommodated by firing rookies, and will be positive if the rate of rookie layoff is not sufficient. It cannot be negative since rookie layoffs will be at most the total desired layoff rate.

 

rookie_quit_fraction[company,department] = company_in_operation_switch[company] * NORMAL_QUIT_FRACTION[company, department] * effect_of_job_attractiveness_on_quits[company, department]

Units: 1/Year

The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the firm begins operations.

Uses:

rookie_quit_rate - Rookies quit at a specified fractional rate.

 

rookie_quit_rate[company,department] = rookie_quit_fraction[company, department] * Rookie_Employees[company, department]

Units: People/Year

Rookies quit at a specified fractional rate.

Uses:

Rookie_Employees - The number of inexperienced employees. Increased by hiring and decreased by quits, layoffs, and assimilation into the ranks of the experienced.

total_quit_rate - The total quit rate is the sum of Rookies and Experienced Employees leaving the firm, by department.

 

SALARY_FOR_EXPERIENCED[company,ENGIN] = 190000

SALARY_FOR_EXPERIENCED[company,CUSTSUPPORT] = 90000

Units: $/(Year*person)

The annual salary of an experienced employee. This is part of the compensation package for employees and is assumed constant throughout the simmulation.

Uses:

customer_support_salary_cost - This calculates all costs for salaries for Customer Support personnel.

engineering_salary_costs - This variable calculates the total salary expense for engineering employees.

expected_present_value_of_salary - The present value of the employee's salary, computed assuming employees will be paid the salary for the experienced workers, and discounted at a specified rate. Used to determine the total present value of the employee compensation package, including salary and options.

salary_for_rookie - Rookie employees earn a specified fraction of the compensation for experienced employees.

 

salary_for_rookie[company,department] = FRACTION_OF_EXPERIENCED_COMPENSATION_FOR_ROOKIES * SALARY_FOR_EXPERIENCED[company, department]

Units: $/(Year*person)

Rookie employees earn a specified fraction of the compensation for experienced employees.

Uses:

customer_support_salary_cost - This calculates all costs for salaries for Customer Support personnel.

engineering_salary_costs - This variable calculates the total salary expense for engineering employees.

 

schedule_pressure[company,ENGIN] = XIDZ(staff_required_for_site_operation[company], ftes_available_for_work[company, ENGIN], 3)

schedule_pressure[company,CUSTSUPPORT] = XIDZ(staff_required_for_customer_support[company], ftes_available_for_work[company, CUSTSUPPORT], 3)

Units: dimensionless

The ratio of the staff required for customer service or site operations relative to the net experienced FTEs available. Drives the workweek.

Uses:

current_workweek - The workweek is determined by schedule pressure, which is the ratio of the staff needed in a given department to the staff available in that department. Workweek is a nonlinear function of schedule pressure.

 

Staffing_Target[company,department] = INTEG(change_in_staffing_target[company, department], required_staff[company, department])

Units: People

The firm's current authorized staff target. Adjusts with a delay to the required number, representing the time required for administrative and planning processes.

Uses:

authorized_staff - A liquidity crunch can reduce the authorized headcount below the target needed to staff the firm's operations.

change_in_staffing_target - The staffing target is adjusted based on the decision making delay in the human resource department.

 

strike_price_of_new_options[company] = stock_price[company] * OPTION_PRICE_RELATIVE_TO_SHARE_PRICE

Units: $/share

Options are issued with a strike price set at a specified ratio to the current stock price.

Uses:

total_basis_of_new_options - The total basis cost of all non vested options increases by the product of the strike price of each option and the rate at which options are issued.

 

SWITCH_TO_REPRICE_OPTIONS = 0

Units: dimensionless

Switch to enable repricing of employee options that are underwater. 1 means repricing is active.

Uses:

repricing_of_non_vested_options - If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

repricing_of_vested_options - If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

 

TARGET_VALUE_OF_NEW_OPTIONS_FOR_EXISTING_EMPLOYEES[company,ENGIN] = 10000

TARGET_VALUE_OF_NEW_OPTIONS_FOR_EXISTING_EMPLOYEES[company,CUSTSUPPORT] = 5000

Units: $/(Year*person)

The target value of new options granted to each existing employee per year.  This is part of the compensation package for employees and is assumed constant throughout the simmulation.

Uses:

options_granted_per_existing_employee - Existing employees should receive options worth the Target Value. The current share price is used to determine the number of shares awarded. Zero if shares have no value.

 

TARGET_VALUE_OF_OPTIONS_FOR_NEW_HIRES[company,ENGIN] = 50000

TARGET_VALUE_OF_OPTIONS_FOR_NEW_HIRES[company,CUSTSUPPORT] = 25000

Units: $/person

The target value of the option package for new hires.  This is part of the compensation package for employees and is assumed constant throughout the simmulation.

Uses:

options_granted_per_hire - Each new hire should receive options worth the Target Value. The current share price is used to determine the number of shares awarded. Zero if the share price is zero.

 

TIME_FOR_ADJUST_EXPECTATIONS_FOR_STOCK_PRICE = 0.25

Units: years

The time period over which employees' expectations for the share price change (used to affect their decision to quit or remain with the firm).

Uses:

expected_stock_price - Employees' expectations about the future stock price, which are used here to affect their decision to remain with the firm or quit, adjust slowly to the actual price (the decision to quit is not based on short term changes in share values).

 

TIME_TO_ADJUST_TRANSACTIONS_GROWTH_EXPECTATIONS = 0.5

Units: Year

It takes time for expectations of growth to adjust to the indicated value.

Uses:

expected_growth_in_transactions - The expected fractional growth rate in transactions adjusts exponentially to the indicated rate.

 

TIME_TO_REPRICE_OPTIONS = 1

Units: years

The time period over which a firm will reprice employee options that are underwater, if they elect to do so (if the Switch to Reprice Options is active).

Uses:

indicated_repricing_of_non_vested_options - If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

indicated_repricing_of_vested_options - If the firm finds its employees' options are underwater they can elect to reprice them to a lower strike price. Options are only repriced if the Switch to Reprice Options is active and if they are underwater (that is, if the current stock price is less than the average strike price). The adjustment time determines how quickly the firm reprices existing options.

 

total_basis_of_new_options[company,department] = options_awarded[company, department] * strike_price_of_new_options[company]

Units: $/Year

The total basis cost of all non vested options increases by the product of the strike price of each option and the rate at which options are issued.

Uses:

Total_Basis_Of_Non_Vested_Options - The total basis cost of all non vested options. The ratio of this stock to the number of non vested options outstanding is the average strike price of the non vested options. Increases as options are granted; decreases as options vest, expire, or are repriced.

 

Total_Basis_Of_Non_Vested_Options[company,department] = INTEG(total_basis_of_new_options[company, department] - total_strike_price_of_options_vesting[company, department] - total_basis_of_options_expiring[company, department] - repricing_of_non_vested_options[company, department], 0)

Units: $

The total basis cost of all non vested options. The ratio of this stock to the number of non vested options outstanding is the average strike price of the non vested options. Increases as options are granted; decreases as options vest, expire, or are repriced.

Uses:

average_strike_price_of_non_vested_options - The average basis cost of nonvested options is the total of all strike prices divided by the number of non vested options outstanding. Set to zero if there are no non vested options.

 

total_basis_of_options_exercised[company,department] = options_exercised[company, department] * average_strike_price_of_vested_options[company, department]

Units: $/Year

Options are exercised by employees at the average strike price for all vested options.

Uses:

Total_Basis_Of_Vested_Options - The total cost basis of all vested options. The ratio of this stock to the number of vested options outstanding is the average strike price of the vested options. Increases as options are vested; decreases as options are exercised or repriced.

proceeds_from_employee_options - The cash proceeds received by the firm from employees exercising their options is the total, across all departments, of the amount paid in by employees for the strike price of the options they exercise.

 

total_basis_of_options_expiring[company,department] = average_strike_price_of_non_vested_options[company, department] * non_vested_options_expiring[company, department]

Units: $/Year

Options expiring reduce the total basis cost of all non vested options by the average strike price.

Uses:

Total_Basis_Of_Non_Vested_Options - The total basis cost of all non vested options. The ratio of this stock to the number of non vested options outstanding is the average strike price of the non vested options. Increases as options are granted; decreases as options vest, expire, or are repriced.

 

Total_Basis_Of_Vested_Options[company,department] = INTEG(total_strike_price_of_options_vesting[company, department] - total_basis_of_options_exercised[company, department] - total_basis_of_vested_options_expiring[company, department] - repricing_of_vested_options[company, department], 0)

Units: $

The total cost basis of all vested options. The ratio of this stock to the number of vested options outstanding is the average strike price of the vested options. Increases as options are vested; decreases as options are exercised or repriced.

Uses:

average_strike_price_of_vested_options - The average strike price of vested options is the total of all strike prices divided by the number of vested options outstanding. Set to zero if there are no vested options.

 

total_basis_of_vested_options_expiring[company,department] = vested_options_expiring[company, department] * average_strike_price_of_vested_options[company, department]

Units: $/Year

The total basis cost per year of the vested options that expire.

Uses:

Total_Basis_Of_Vested_Options - The total cost basis of all vested options. The ratio of this stock to the number of vested options outstanding is the average strike price of the vested options. Increases as options are vested; decreases as options are exercised or repriced.

 

total_employee_options[company] = SUM(Non_Vested_Employee_Options[company, department!]) + SUM(Vested_Employee_Options[company, department!])

Units: shares

The sum of the options, vested and non vested, held by employees of all types.

Uses:

options_as_a_fraction_of_shares_outstanding - The number of options held by employees as a fraction of the total number of existing shares. Zero prior to entry.

 

total_quit_rate[company,department] = experienced_quit_rate[company, department] + rookie_quit_rate[company, department]

Units: People/Year

The total quit rate is the sum of Rookies and Experienced Employees leaving the firm, by department.

Uses:

desired_hire_rate - Desired hiring is the sum of replacement hiring (to replace quits) and a fraction of the gap between the authorized and actual headcount. Labor flows are active only after the firm begins operations. Note that we assume quits are replaced immediately. this is an a fortiori assumption in that modeling the delay in recognizing quits and filling vacancies would limit staff further during rapid growth, working against the GBF strategy.

non_vested_options_expiring - Non vested options expire when the employees holding them leave the firm. Each employee leaving reduces the stock of non vested options by the average number of non vested options per employee.

 

total_staff_per_department[company,department] = Rookie_Employees[company, department] + Experienced_Employees[company, department]

Units: People

The total number of staff in a given department, including experienced and inexperienced.

Uses:

Non_Vested_Employee_Options - The total number of non vested options held by employees. Increases as options are awarded; decreases as options vest or expire on the attrition of employees.

average_productivity - Average productivity is measured by comparing the available FTEs to the headcount. It will always be below the one because of lower productivity of rookies as well as time spend for recruiting and training. Set to zero if no employees.

desired_hire_rate - Desired hiring is the sum of replacement hiring (to replace quits) and a fraction of the gap between the authorized and actual headcount. Labor flows are active only after the firm begins operations. Note that we assume quits are replaced immediately. this is an a fortiori assumption in that modeling the delay in recognizing quits and filling vacancies would limit staff further during rapid growth, working against the GBF strategy.

INITIAL_STAFF - The initial staff of the firm, by department.

non_vested_options_per_employee - Average non vested options per employee is the ratio of total non vested employees to employees (by department).

options_awarded_to_existing_employees - Each employee receives a certain grant of options each year.

rookie_fraction - The Rookie Fraction measures the proportion of rookies among the workforce of a particular department.

vested_options_per_employee - Average vested options per employee is the ratio of total vested employees to employees (by department).

 

total_strike_price_of_options_vesting[company,department] = options_vesting[company, department] * average_strike_price_of_non_vested_options[company, department]

Units: $/Year

Options vesting are assumed to be priced at the average strike price for non vested options.

Uses:

Total_Basis_Of_Non_Vested_Options - The total basis cost of all non vested options. The ratio of this stock to the number of non vested options outstanding is the average strike price of the non vested options. Increases as options are granted; decreases as options vest, expire, or are repriced.

Total_Basis_Of_Vested_Options - The total cost basis of all vested options. The ratio of this stock to the number of vested options outstanding is the average strike price of the vested options. Increases as options are vested; decreases as options are exercised or repriced.

 

TRANSACTION_REPORTING_TIME = 0.25

Units: Year

The time required for the firm to report and estimate transaction volume.

Uses:

recent_transactions - Recent transactions averages transactions volume over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

 

Vested_Employee_Options[company,department] = INTEG(options_vesting[company, department] - options_exercised[company, department] - vested_options_expiring[company, department], 0)

Units: shares

The number of vested options increases as non vested options vest and decreases when these options are exercised or expire.

Uses:

average_strike_price_of_vested_options - The average strike price of vested options is the total of all strike prices divided by the number of vested options outstanding. Set to zero if there are no vested options.

fraction_of_vested_options - The fraction of non vested options among all outstanding options. Zero if there are no options.

repricing_of_vested_options - If the firm finds the options of its employees are significantly underwater, they can choose to reprice the options at a lower strike price.

total_employee_options - The sum of the options, vested and non vested, held by employees of all types.

vested_options_per_employee - Average vested options per employee is the ratio of total vested employees to employees (by department).

vested_options_reaching_expiration_date - The rate at which vested options reach their expiration date depends on the number of options and their average life.

 

vested_options_expiring[company,department] = (1 - fraction_of_options_exercised[company, department]) * vested_options_reaching_expiration_date[company, department]

Units: shares/Year

Vested options reaching their expiration date that employees choose not to exercise expire.

Uses:

Vested_Employee_Options - The number of vested options increases as non vested options vest and decreases when these options are exercised or expire.

total_basis_of_vested_options_expiring - The total basis cost per year of the vested options that expire.

 

vested_options_per_employee[company,department] = Vested_Employee_Options[company, department]/total_staff_per_department[company, department]

Units: shares/person

Average vested options per employee is the ratio of total vested employees to employees (by department).

 

vested_options_reaching_expiration_date[company,department] = Vested_Employee_Options[company, department]/AVERAGE_LIFE_OF_VESTED_OPTIONS[company]

Units: shares/Year

The rate at which vested options reach their expiration date depends on the number of options and their average life.

Uses:

options_exercised - Employees exercise a fraction of their vested options approaching their expiration date.

vested_options_expiring - Vested options reaching their expiration date that employees choose not to exercise expire.

 

VESTING_PERIOD[company,department] = 3

Units: Year

The average vesting period for options.

Uses:

expected_present_value_of_stock_options - The present value of the average employee's non vested option holdings. Discounted at a specified rate over the vesting period: the higher the discount rate or longer the vesting period, the lower the present value of the options held.

options_vesting - Options vest over an average vesting period. Options vest only if the company is in operation.

 

WILLINGNESS_TO_LAY_OFF = 1

Units: dimensionless

The firm's propensity to lay off workers if there are too many (if the desired hire rate is negative). 0 represents no layoffs; 1 means as willing to lay off excess workers as to hire when workers are needed.

Uses:

desired_layoff_rate - The desired layoff rate is the magnitude of the desired layoff rate whenever that rate is less than zero. The Willingness to Lay Off indicates how responsive the firm is to layoff excess workers (0 equals no layoffs; 1 is just as willing to lay off as to hire).

 

WORKER_BURNOUT_TIME = 0.25

Units: years

The time period over which fatigue and burnout develop and dissipate.

Uses:

change_in_average_workweek - The average workweek is an exponential moving average of the work week. Active only after the firm begins operations.

 

********************************

   .Market

********************************

 

change_in_penetration = (MAXIMUM_INTERNET_PENETRATION - Potential_Internet_Penetration) /PENETRATION_ADJUSTMENT_TIME

Units: 1/Year

The potential adoption of the internet adjusts gradually from the initial to assumed maximum level.

Uses:

Potential_Internet_Penetration - Potential Internet penetration increases over time (as the usefulness of the Internet increases and costs fall).

 

CONTACT_RATE = 100

Units: 1/years

The average number of contacts and other word-of-mouth type of contacts each potential user experiences in a year, including media exposure. The parameters of this structure were calibrated to match Forrester Research data on internet diffusion in the US.

Uses:

awareness_from_word_of_mouth - The number of people trying online shopping as a result of word of mouth. Depends on the contact rate, probability of adoption (adjusted by the relative attractiveness of online shopping) and the probability of having a word of mouth encounter with a current on line shopper.

contacts_between_potential_users_and_actual_users - Internet adoption follows the standard logistic diffusion model. The parameters were selected to fit data and projections for internet adoption from Forrester Research.

 

contacts_between_potential_users_and_actual_users = potential_internet_user * CONTACT_RATE * (Total_Internet_Users/Population)

Units: People/Year

Internet adoption follows the standard logistic diffusion model. The parameters were selected to fit data and projections for internet adoption from Forrester Research.

Uses:

increase_in_internet_users - The rate at which people become internet users based on exposure to other users and other forms of word of mouth including media reports.

 

FRACTION_OF_CONTACTS_RESULTING_IN_ADOPTION = 0.025

Units: dimensionless

The fraction of contacts between potential and current internet users resulting in adoption of the internet. The parameters of this structure were calibrated to match Forrester Research data on internet diffusion in the US.

Uses:

increase_in_internet_users - The rate at which people become internet users based on exposure to other users and other forms of word of mouth including media reports.

 

HIGH_VOLUME_PURCHASE_FRACTION = 0.4

Units: dimensionless

The fraction of the potential online segment that might ultimately become high-volume customers.

Uses:

potential_size_of_high_volume_segment - The fraction of internet users who might become high-volume purchasers in the category considered is a fraction of the population that might shop online in the category, which in turn is a fraction of the total online population (not all internet users will shop online or become high volume purchasers).

 

increase_in_internet_users = FRACTION_OF_CONTACTS_RESULTING_IN_ADOPTION * contacts_between_potential_users_and_actual_users

Units: People/Year

The rate at which people become internet users based on exposure to other users and other forms of word of mouth including media reports.

Uses:

Total_Internet_Users - The number of people connected to the Internet.

increase_in_potential_online_shoppers - Only a fraction of those gaining access to the internet will become online shoppers in the category considered.

 

INITIAL_INTERNET_PENETRATION = 0.225

Units: dimensionless

The Initial fraction of potential Internet penetration in 1995.

Uses:

Potential_Internet_Penetration - Potential Internet penetration increases over time (as the usefulness of the Internet increases and costs fall).

 

MAXIMUM_INTERNET_PENETRATION = 0.65

Units: dimensionless

The assumed maximum fraction of the population with personal access to the internet.

Uses:

change_in_penetration - The potential adoption of the internet adjusts gradually from the initial to assumed maximum level.

 

net_population_growth = Population * NET_POPULATION_GROWTH_RATE

Units: People/Year

The annual growth of the US population is the product of the population and the net growth rate.

Uses:

Population - US population in 1995, calibrated with Forrester Data.

 

NET_POPULATION_GROWTH_RATE = 0.0105

Units: 1/Year

The U.S. population grows by 1.05 percent annually through immigration and a positive net birth rate. (Based on Forrester Data)

Uses:

net_population_growth - The annual growth of the US population is the product of the population and the net growth rate.

 

PENETRATION_ADJUSTMENT_TIME = 4

Units: years

The potential internet adopter population adjusts to the maximum level over this time period. Represents the gradual increase in internet utility and drop in costs that makes internet use more attractive to a larger segment of the population.

Uses:

change_in_penetration - The potential adoption of the internet adjusts gradually from the initial to assumed maximum level.

 

percentage_of_population_online = Total_Internet_Users/Population

Units: dimensionless

The fraction of the US population that is online.

 

Population = INTEG(net_population_growth, 2.59e + 008)

Units: People

US population in 1995, calibrated with Forrester Data.

Uses:

awareness_from_word_of_mouth - The number of people trying online shopping as a result of word of mouth. Depends on the contact rate, probability of adoption (adjusted by the relative attractiveness of online shopping) and the probability of having a word of mouth encounter with a current on line shopper.

contacts_between_potential_users_and_actual_users - Internet adoption follows the standard logistic diffusion model. The parameters were selected to fit data and projections for internet adoption from Forrester Research.

net_population_growth - The annual growth of the US population is the product of the population and the net growth rate.

percentage_of_population_online - The fraction of the US population that is online.

potential_internet_user - The number of people who might but have not yet become internet users, equal to the product of the population and the fraction of the total population for which the internet is an attractive innovation, less the number of these who have already become internet users. The maximum function ensures nonnegativity of this stock in the case that the potential market size drops (which does not occur in the base case).  Note that if population sudently drops after total internet users has grown, population might fall bellow total internet users. This lack of extreme condition robustness, is not significant since the market sector functions as an exogenous input for the rest of the model.

 

Potential_Internet_Penetration = INTEG(change_in_penetration, INITIAL_INTERNET_PENETRATION)

Units: dimensionless

Potential Internet penetration increases over time (as the usefulness of the Internet increases and costs fall).

Uses:

change_in_penetration - The potential adoption of the internet adjusts gradually from the initial to assumed maximum level.

potential_internet_user - The number of people who might but have not yet become internet users, equal to the product of the population and the fraction of the total population for which the internet is an attractive innovation, less the number of these who have already become internet users. The maximum function ensures nonnegativity of this stock in the case that the potential market size drops (which does not occur in the base case).  Note that if population sudently drops after total internet users has grown, population might fall bellow total internet users. This lack of extreme condition robustness, is not significant since the market sector functions as an exogenous input for the rest of the model.

 

potential_internet_user = MAX(0, Potential_Internet_Penetration * Population - Total_Internet_Users)

Units: People

The number of people who might but have not yet become internet users, equal to the product of the population and the fraction of the total population for which the internet is an attractive innovation, less the number of these who have already become internet users. The maximum function ensures nonnegativity of this stock in the case that the potential market size drops (which does not occur in the base case).  Note that if population sudently drops after total internet users has grown, population might fall bellow total internet users. This lack of extreme condition robustness, is not significant since the market sector functions as an exogenous input for the rest of the model.

Uses:

contacts_between_potential_users_and_actual_users - Internet adoption follows the standard logistic diffusion model. The parameters were selected to fit data and projections for internet adoption from Forrester Research.

 

potential_size_of_high_volume_segment = Total_Internet_Users * FRACTION_OF_INTERNET_USERS_IN_PRODUCT_CATEGORY * HIGH_VOLUME_PURCHASE_FRACTION

Units: People

The fraction of internet users who might become high-volume purchasers in the category considered is a fraction of the population that might shop online in the category, which in turn is a fraction of the total online population (not all internet users will shop online or become high volume purchasers).

Uses:

fraction_moving_from_occasional_to_high_volume - A fraction of the occasional buyers become high-volume buyers each year as they grow more comfortable using the online service. This fraction falls as the total number of high-volume customers approaches a maximum. Note that the size of the high volume segment does not depend on the attractiveness of online shopping vs. brick and mortar. This reflects the assumption that total purchases in a category are not affected by the availability of online shopping.

 

Total_Internet_Users = INTEG(increase_in_internet_users, 1.5e + 007)

Units: People

The number of people connected to the Internet.

Uses:

Non_Shopping_Internet_Users - The stock of internet users who might ultimately shop online in the category considered, but who have not yet become aware of or entered the online market.

contacts_between_potential_users_and_actual_users - Internet adoption follows the standard logistic diffusion model. The parameters were selected to fit data and projections for internet adoption from Forrester Research.

percentage_of_population_online - The fraction of the US population that is online.

potential_internet_user - The number of people who might but have not yet become internet users, equal to the product of the population and the fraction of the total population for which the internet is an attractive innovation, less the number of these who have already become internet users. The maximum function ensures nonnegativity of this stock in the case that the potential market size drops (which does not occur in the base case).  Note that if population sudently drops after total internet users has grown, population might fall bellow total internet users. This lack of extreme condition robustness, is not significant since the market sector functions as an exogenous input for the rest of the model.

potential_size_of_high_volume_segment - The fraction of internet users who might become high-volume purchasers in the category considered is a fraction of the population that might shop online in the category, which in turn is a fraction of the total online population (not all internet users will shop online or become high volume purchasers).

 

********************************

   .New_structure

********************************

v7/02. This model accompanies Oliva, R., J. Sterman and M. Giese (forth.) "Limits to Growth in the New Economy: An Exploration of the ‘Get Big Fast’ Strategy"  Syst. Dynamics Rev. See http://www.people.hbs.edu/roliva/research/dotcom

 

effect_of_lifestyle_on_productivity[company,department] = FUNCTION_FOR_EFFECT_OF_LIFESTYLE_ON_PRODUCTIVITY(Average_Workweek[company, department])

Units: dimensionless

Effect of recent workweek on employee productivity.

Uses:

ftes_available_for_work - The effective, fully trained staff of the firm available to run the operations of the business, measured in full time equivalent experienced people. Depends on the gross staff of each skill level, adjusted by their relative productivity, less the effective staff devoted to recruiting and training.

 

FUNCTION_FOR_EFFECT_OF_LIFESTYLE_ON_PRODUCTIVITY([(0,0)-(200,1.2)],(0,1.1),(20,1.07),(40,1),(60,0.8),(80,0.4),(100,0.1),(120,0.03),(140,0.01),(160,0))

Units: dimensionless

As the average workweek over a long period rises, worker productivity drops.  Values from Sterman, 2000, pg. 581).

Uses:

effect_of_lifestyle_on_productivity - Effect of recent workweek on employee productivity.

 

probability_of_browsing_online_shopping=IF_THEN_ELSE(SWITCH_FOR_RELATIVE_ATTRACTIVENESS_ON_WOM = 1, REFERENCE_PROBABILITY_OF_BROWSING_ONLINE_SHOPPING * relative_attractiveness_of_online_shopping_vs_bricks_and_mortar, REFERENCE_PROBABILITY_OF_BROWSING_ONLINE_SHOPPING)

Units: dimensionless

The probability people will try online shopping after a word of mouth encounter.

Uses:

awareness_from_word_of_mouth - The number of people trying online shopping as a result of word of mouth. Depends on the contact rate, probability of adoption (adjusted by the relative attractiveness of online shopping) and the probability of having a word of mouth encounter with a current on line shopper.

 

SWITCH_FOR_RELATIVE_ATTRACTIVENESS_ON_WOM = 0

Units: dimensionless

Switch to close the loop between relatie attractiveness of online shopping and the inflow into the online segment.  Base case simulaitons assume that this feedback mechanism is off.

Uses:

probability_of_browsing_online_shopping - The probability people will try online shopping after a word of mouth encounter.

 

TIME_TO_PERCEIVE_PRODUCTIVITY = 1.#INF

Units: years

Time it takes managment to evaluate and perceive average employee productivity.  In the base case the adjustment of expected productivity was render innefective (with a very long time constant), making the assumptions that management would not update its expectation of productivity.  Making this adjustment possible introduces large oscilations on the staffing levels, resulting on a harder evaluation of trends.

Uses:

expected_productivity - The firm's perception of average productivity of employees in the long run, taking into account the mix of experienced and inexperienced workers and the normal recruiting and training load on experienced staff. Set to the initial equilibrium productivity.

 

********************************

   .Relative_performance

********************************

 

adequacy_of_customer_support_staff[company]=IF_THEN_ELSE(company_in_operation_switch[company] = 0, 1, ZIDZ(ftes_available_for_work[company, CUSTSUPPORT] * relative_workweek[company, CUSTSUPPORT], staff_required_for_customer_support[company]) )

Units: dimensionless

The adequacy of staffing is the ratio of the staff available for work, adjusted by the relative workweek to reflect overtime, to the staff required for operations. Set to neutral prior to operations and zero if no staff are required.

Uses:

current_quality_of_customer_support - The quality of customer support aggregates factors such as call center waiting time, email response time, and the quality of the answers and help provided. 1 means flawless customer support, 0 means dreadful service.

 

adequacy_of_server_infrastructure[company]=IF_THEN_ELSE(company_in_operation_switch[company] = 0, 1, ZIDZ(Server_Infrastructure[company], required_server_infrastructure[company]) )

Units: dimensionless

The adequacy of server infrastructure is the ratio of the infrastructure available to the infrastructure required. Set to zero if either the infrastructure required is zero or the firm has not yet begun operations.

Uses:

current_site_performance - Site performance is an aggregate measure of customer satisfaction with the firm's website, incorporating factors such as uptime and response time. 1 means flawless and quick performance, 0 means unacceptably poor performance. Performance depends on the adequacy of the firm's server infrastructure and the adequacy of the firms engineering staff (which handles exceptions, problems, hacker attacks, etc.).

 

adequacy_of_technical_staff[company,ENGIN]=IF_THEN_ELSE(company_in_operation_switch[company] = 0, 1, ZIDZ(ftes_available_for_work[company, ENGIN] * relative_workweek[company, ENGIN], staff_required_for_site_operation[company]) )

Units: dimensionless

The adequacy of technical staff is the ratio of the staff available, including the effect of overtime, to the staff required. Adequacy is neutral prior to operations and zero if required staff is zero.

Uses:

current_site_performance - Site performance is an aggregate measure of customer satisfaction with the firm's website, incorporating factors such as uptime and response time. 1 means flawless and quick performance, 0 means unacceptably poor performance. Performance depends on the adequacy of the firm's server infrastructure and the adequacy of the firms engineering staff (which handles exceptions, problems, hacker attacks, etc.).

 

attractiveness_of_online_shopping_to_customers[company] = effect_of_brand_equity_on_attractiveness[company] * effect_of_content_on_attractiveness[company] * effect_of_fulfillment_on_attractiveness[company] * effect_of_price_on_attractiveness[company] * effect_of_selection_on_attractiveness[company] * effect_of_service_on_attractiveness[company] * effect_of_site_performance_on_attractiveness[company]

Units: dimensionless

The overall attractiveness of the firm depends on these factors.

Uses:

attractiveness_share - Company's share of overall attractiveness in the online market

relative_attractiveness_of_online_shopping_vs_bricks_and_mortar - The attractiveness of brick and mortar shopping is assumed constant, so the relative attractiveness of online shopping overall is the weighted average of the attractiveness of the different online firms. The weight on each firm is its market share. The small term added to attractiveness prevents division by zero in the formulation for buyer abandonment prior to the entry of any online firms.

relative_order_size - The average order size relative to a reference is an increasing function of firm attractiveness.

turnover_fraction - Defection of loyal customers increases as the attractiveness of a firm falls. Must remain less than a maximum rate, and greater than a minimum rate.

 

attractiveness_share[company] = ZIDZ(attractiveness_of_online_shopping_to_customers[company], SUM(attractiveness_of_online_shopping_to_customers[company!]) )

Units: dimensionless

Company's share of overall attractiveness in the online market

Uses:

experienced_buyer_recapture_fraction - The rate at which companies gain loyal users from the pool of independent users depends on the attractiveness of the firm. Always less than the maximum switch fraction.

increase_in_actual_online_shoppers - The rate at which people start buying online. The greater the attractiveness of each online firm, the faster potential shoppers try the service.

independent_shopper_pageviews - Each company captures a fraction of the total number of pageviews generated by independent shoppers.

independent_shopper_transactions - Each company captures a fraction of the total number of transactions generated by independent shoppers.

potential_shopper_pageviews - Each potential online shopper generates a certain number of pageviews, allocated to each company in proportion to their attractiveness share. Note that we are assuming that potential shoppers have access to the relative attractiveness of each firm through brand equity advertising and word of mouth effects.

 

CONVENIENCE_VALUE_OF_ONLINE_SHOPPING = 0

Units: $/Item

The convenience value of online shopping from avoidance of driving to the mall.

Uses:

effective_price - The effective price of online shopping, after including the convenience effect. Not lower than a minimum price to prevent overflow in the attractiveness formulation.

 

current_quality_of_customer_support[company] = MIN(1, adequacy_of_customer_support_staff[company])

Units: dimensionless

The quality of customer support aggregates factors such as call center waiting time, email response time, and the quality of the answers and help provided. 1 means flawless customer support, 0 means dreadful service.

Uses:

perceived_quality_of_customer_support - Customer perceptions of customer support quality adjust over time to the current quality.

 

current_site_performance[company] = MIN(1, adequacy_of_server_infrastructure[company] * adequacy_of_technical_staff[company, ENGIN])

Units: dimensionless

Site performance is an aggregate measure of customer satisfaction with the firm's website, incorporating factors such as uptime and response time. 1 means flawless and quick performance, 0 means unacceptably poor performance. Performance depends on the adequacy of the firm's server infrastructure and the adequacy of the firms engineering staff (which handles exceptions, problems, hacker attacks, etc.).

Uses:

perceived_site_performance - Customer perceptions of site performance adjust over time to the current performance.

 

CUSTOMER_CONTACTS_PER_TRANSACTION = 1.1

Units: contact/Transaction

The number of customer contacts resulting from each transaction, on average.

Uses:

customer_contacts - The total number of contacts with customers to which the firm must respond.

indicated_customer_support_staff - The customer support staff needed is based on the FTEs needed per customer contact, the number of customer contacts generated per transaction, and the number of transactions, adjusted for a scale economy effect.

 

CUSTOMER_MEMORY = 0.5

Units: Year

The average time required for customer perceptions of site and customer service quality to adjust to current conditions.

Uses:

perceived_quality_of_customer_support - Customer perceptions of customer support quality adjust over time to the current quality.

perceived_site_performance - Customer perceptions of site performance adjust over time to the current performance.

 

ECONOMIES_OF_SCALE_FOR_CUSTOMER_SERVICE = 0.85

Units: dimensionless

Parameter governing the scale economy effect for customer service staff. 1 means no scale economy; smaller values indicate larger scale economies.

Uses:

indicated_customer_support_staff - The customer support staff needed is based on the FTEs needed per customer contact, the number of customer contacts generated per transaction, and the number of transactions, adjusted for a scale economy effect.

 

ECONOMIES_OF_SCALE_FOR_SERVER_REQUIREMENTS = 0.95

Units: dimensionless

Determines the strength of the scale economy effect for server infrastructure. The smaller the value, the greater the scale economy effect.

Uses:

indicated_server_infrastructure - The indicated level of server infrastructure depends on the volume of pageviews the firm must process, but is subject to economies of scale. If the economy of scale exponent is 1 there are no scale economies; the smaller the exponent, the greater the scale economies.

 

effect_of_brand_equity_on_attractiveness[company] = company_in_operation_switch[company] * (Brand_Equity[company]/REFERENCE_BRAND_EQUITY_FOR_CUSTOMER_CHOICE) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_BRAND_EQUITY

Units: dimensionless

The better a firm's site performance, the more attractive it is.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effect_of_content_on_attractiveness[company] = company_in_operation_switch[company] * (Content[company]/reference_content_for_customer_choice) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_CONTENT

Units: dimensionless

The better a firm's content, the greater its attractiveness.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effect_of_fulfillment_on_attractiveness[company] = company_in_operation_switch[company] * (perceived_fulfillment_time[company]/REFERENCE_FULFILLMENT_TIME_FOR_CUSTOMER_CHOICE) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_FULFILLMENT

Units: dimensionless

The better a firm's site performance, the more attractive it is.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effect_of_price_on_attractiveness[company] = company_in_operation_switch[company] * (effective_price[company]/brick_and_mortar_price) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_PRICE

Units: dimensionless

The attractiveness of online shopping from price. Depends on the effective price of online shopping, including the convenience effect, relative to the brick and mortar price.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effect_of_selection_on_attractiveness[company] = company_in_operation_switch[company] * (product_selection[company]/REFERENCE_SELECTION_FOR_CUSTOMER_CHOICE) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_SELECTION

Units: dimensionless

The better a firm's product selection, the more attractive it is.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effect_of_service_on_attractiveness[company] = company_in_operation_switch[company] * (perceived_quality_of_customer_support[company]) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_SERVICE

Units: dimensionless

The better a firm's customer service, the more attractive it is.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effect_of_site_performance_on_attractiveness[company] = company_in_operation_switch[company] * (perceived_site_performance[company]) ^SENSITIVITY_OF_ATTRACTIVENESS_FROM_SITE_PERFORMANCE

Units: dimensionless

The better a firm's site performance, the more attractive it is.

Uses:

attractiveness_of_online_shopping_to_customers - The overall attractiveness of the firm depends on these factors.

 

effective_price[company] = MAX(1e - 012, price[company] - CONVENIENCE_VALUE_OF_ONLINE_SHOPPING)

Units: $/Item

The effective price of online shopping, after including the convenience effect. Not lower than a minimum price to prevent overflow in the attractiveness formulation.

Uses:

effect_of_price_on_attractiveness - The attractiveness of online shopping from price. Depends on the effective price of online shopping, including the convenience effect, relative to the brick and mortar price.

 

experienced_buyer_recapture_fraction[company] = MAXIMUM_CUSTOMER_SWITCH_FRACTION * company_in_operation_switch[company] * attractiveness_share[company]

Units: 1/years

The rate at which companies gain loyal users from the pool of independent users depends on the attractiveness of the firm. Always less than the maximum switch fraction.

Uses:

capture_of_high_volume_buyers - Independent High-Volume buyers can become loyal buyers again based on the experienced buyer recapture fraction, which differs for the different companies.

capture_of_occasional_buyers - Independent Occasional buyers can become loyal buyers again based on the Experienced Buyer Recapture Fraction, which differs for each company.

 

FTE_REQUIRED_PER_CUSTOMER_CONTACT = 0.0001

Units: Year*Fte/contact

The reciprocal of the number of customer contacts each FTE service representative can process in a year.

Uses:

indicated_customer_support_staff - The customer support staff needed is based on the FTEs needed per customer contact, the number of customer contacts generated per transaction, and the number of transactions, adjusted for a scale economy effect.

 

FTE_REQUIRED_PER_SERVER = 3e - 006

Units: Fte/$

The parameter measures the manpower required to support one dollar's worth of server infrastructure.

Uses:

staff_required_for_site_operation - Technical staff required for site operation is proportional to the server infrastructure required.

 

indicated_customer_support_staff[company] = FTE_REQUIRED_PER_CUSTOMER_CONTACT * CUSTOMER_CONTACTS_PER_TRANSACTION * REFERENCE_TRANSACTIONS_FOR_CUSTOMER_SERVICE * (total_transactions[company]/REFERENCE_TRANSACTIONS_FOR_CUSTOMER_SERVICE) ^ECONOMIES_OF_SCALE_FOR_CUSTOMER_SERVICE

Units: Fte

The customer support staff needed is based on the FTEs needed per customer contact, the number of customer contacts generated per transaction, and the number of transactions, adjusted for a scale economy effect.

Uses:

staff_required_for_customer_support - Customer service staff required depends on an indicated level, which depends on the volume of transactions the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

 

indicated_server_infrastructure[company] = REFERENCE_SERVER_INFRASTRUCTURE * (SERVER_REQUIREMENTS_PER_PAGEVIEW * total_pageviews[company]/REFERENCE_SERVER_INFRASTRUCTURE) ^ECONOMIES_OF_SCALE_FOR_SERVER_REQUIREMENTS

Units: $

The indicated level of server infrastructure depends on the volume of pageviews the firm must process, but is subject to economies of scale. If the economy of scale exponent is 1 there are no scale economies; the smaller the exponent, the greater the scale economies.

Uses:

required_server_infrastructure - The server infrastructure required depends on an indicated level, which depends on the volume of pageviews the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

 

INITIAL_SITE_PERFORMANCE = 1

Units: dimensionless

Initial Site Performance

Uses:

perceived_site_performance - Customer perceptions of site performance adjust over time to the current performance.

 

marketshare[company] = ZIDZ(sales_revenue[company], total_market)

Units: dimensionless

Market share is calculated by comparing the companies sales revenue to total sales revenue in the industry.

Uses:

industry_average_return_on_sales - Industry average return on sales is the return on sales of each firm weighted by its market share.

relative_attractiveness_of_online_shopping_vs_bricks_and_mortar - The attractiveness of brick and mortar shopping is assumed constant, so the relative attractiveness of online shopping overall is the weighted average of the attractiveness of the different online firms. The weight on each firm is its market share. The small term added to attractiveness prevents division by zero in the formulation for buyer abandonment prior to the entry of any online firms.

relative_market_share - The market share of the firm relative to the share of the market it would get if all firms n had equal shares. Normalized by the maximum share of the firm (100%) less 1/n. This variable ranges from [-1/n, 1 ], with a normal value of zero (when the firm's share equals 1/n). Set to one if only one firm.

 

MAXIMUM_CUSTOMER_SWITCH_FRACTION = 1

Units: 1/years

The maximum annual fractional switching rate for customers.

Uses:

experienced_buyer_recapture_fraction - The rate at which companies gain loyal users from the pool of independent users depends on the attractiveness of the firm. Always less than the maximum switch fraction.

online_shopping_abandonment_fraction - The fractional rate at which independent online shoppers abandon online shopping in favor of bricks-and-mortar shopping.

turnover_fraction - Defection of loyal customers increases as the attractiveness of a firm falls. Must remain less than a maximum rate, and greater than a minimum rate.

 

MINIMUM_SERVER_INFRASTRUCTURE_REQUIRED = 10000

Units: $

The minimum server infrastructure required to run the firm's website.

Uses:

required_server_infrastructure - The server infrastructure required depends on an indicated level, which depends on the volume of pageviews the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

 

MINIMUM_STAFF_REQUIRED_FOR_CUSTOMER_SUPPORT = 5

Units: Fte

The minimum staff required for customer support.

Uses:

staff_required_for_customer_support - Customer service staff required depends on an indicated level, which depends on the volume of transactions the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

 

MINIMUM_STAFF_REQUIRED_FOR_SITE_OPERATION = 5

Units: Fte

Uses:

staff_required_for_site_operation - Technical staff required for site operation is proportional to the server infrastructure required.

 

NORMAL_DEFECTION_FRACTION = 0.1

Units: 1/Year

The normal fractional rate at which customers defect and become independent.

Uses:

turnover_fraction - Defection of loyal customers increases as the attractiveness of a firm falls. Must remain less than a maximum rate, and greater than a minimum rate.

 

NORMAL_ONLINE_SHOPPING_ABANDONMENT_FRACTION = 0.1

Units: 1/years

The normal fractional rate at which independent buyers abandon online shopping if its attractiveness is normal.

Uses:

online_shopping_abandonment_fraction - The fractional rate at which independent online shoppers abandon online shopping in favor of bricks-and-mortar shopping.

 

NORMAL_WORKWEEK = 40

Units: hours/week

The standard workweek is assumed to be 40 hours.

Uses:

Average_Workweek - The recent average workweek, used to indicate fatigue and burnout due to sustained high work hours.

relative_workweek - The ratio of the current workweek to normal, used to affect the net effort provided and the adequacy of customer service and site operations.

 

online_shopping_abandonment_fraction = MIN(MAXIMUM_CUSTOMER_SWITCH_FRACTION, ZIDZ(NORMAL_ONLINE_SHOPPING_ABANDONMENT_FRACTION, relative_attractiveness_of_online_shopping_vs_bricks_and_mortar) )

Units: 1/years

The fractional rate at which independent online shoppers abandon online shopping in favor of bricks-and-mortar shopping.

Uses:

high_volume_buyer_abandonment_rate - The rate at which high-volume buyers abandon online shopping in favor of returning to brick-and-mortar shopping.

occasional_buyer_abandonment_rate - The rate at which occasional buyers stop shopping online and return to brick-and-mortar shopping.

 

perceived_fulfillment_time[company] = SMOOTHI(average_fulfillment_time[company], TIME_TO_PERCEIVE_FULFILLMENT_TIME, 1)

Units: days

Customer perceptions about average fulfillment time adjust gradually to actual average fulfillment times.

Uses:

effect_of_fulfillment_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

perceived_quality_of_customer_support[company] = SMOOTHI(current_quality_of_customer_support[company], CUSTOMER_MEMORY, 1)

Units: dimensionless

Customer perceptions of customer support quality adjust over time to the current quality.

Uses:

effect_of_service_on_attractiveness - The better a firm's customer service, the more attractive it is.

 

perceived_site_performance[company] = SMOOTHI(current_site_performance[company], CUSTOMER_MEMORY, INITIAL_SITE_PERFORMANCE)

Units: dimensionless

Customer perceptions of site performance adjust over time to the current performance.

Uses:

effect_of_site_performance_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

REFERENCE_BRAND_EQUITY_FOR_CUSTOMER_CHOICE = 7e + 008

Units: $

The reference level of brand equity used in customer decisions to frequent a site.

Uses:

effect_of_brand_equity_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

reference_content_for_customer_choice = REFERENCE_SELECTION_FOR_CUSTOMER_CHOICE * PAGES_REQUIRED_PER_SKU

Units: webpages

The reference level of content used in customer decisions to frequent a site.

Uses:

effect_of_content_on_attractiveness - The better a firm's content, the greater its attractiveness.

 

REFERENCE_FULFILLMENT_TIME_FOR_CUSTOMER_CHOICE = 2

Units: days

The reference order fulfillment time used in customer decisions to frequent a site.

Uses:

effect_of_fulfillment_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

REFERENCE_SELECTION_FOR_CUSTOMER_CHOICE = 6e + 006

Units: Skus

The reference level of selection used in customer decisions to frequent a site.

Uses:

effect_of_selection_on_attractiveness - The better a firm's product selection, the more attractive it is.

reference_content_for_customer_choice - The reference level of content used in customer decisions to frequent a site.

 

REFERENCE_SERVER_INFRASTRUCTURE = 2e + 006

Units: $

The reference level of server infrastructure for the determination of scale economies.

Uses:

indicated_server_infrastructure - The indicated level of server infrastructure depends on the volume of pageviews the firm must process, but is subject to economies of scale. If the economy of scale exponent is 1 there are no scale economies; the smaller the exponent, the greater the scale economies.

 

REFERENCE_TRANSACTIONS_FOR_CUSTOMER_SERVICE = 1e + 006

Units: transactions/Year

The reference rate of transactions used in the determination of the scale economy effect for customer service staff.

Uses:

indicated_customer_support_staff - The customer support staff needed is based on the FTEs needed per customer contact, the number of customer contacts generated per transaction, and the number of transactions, adjusted for a scale economy effect.

 

relative_attractiveness_of_online_shopping_vs_bricks_and_mortar = SUM(attractiveness_of_online_shopping_to_customers[company!] * marketshare[company!]) + 1e - 009

Units: dimensionless

The attractiveness of brick and mortar shopping is assumed constant, so the relative attractiveness of online shopping overall is the weighted average of the attractiveness of the different online firms. The weight on each firm is its market share. The small term added to attractiveness prevents division by zero in the formulation for buyer abandonment prior to the entry of any online firms.

Uses:

online_shopping_abandonment_fraction - The fractional rate at which independent online shoppers abandon online shopping in favor of bricks-and-mortar shopping.

probability_of_browsing_online_shopping - The probability people will try online shopping after a word of mouth encounter.

reentry_fraction - The fractional reentry rate of former online shoppers is a normal fraction modified by the relative attractiveness of online vs. brick and mortar shopping. High relative attractiveness accelerates reentry.

 

relative_workweek[company,department] = current_workweek[company, department]/NORMAL_WORKWEEK

Units: dimensionless

The ratio of the current workweek to normal, used to affect the net effort provided and the adequacy of customer service and site operations.

Uses:

adequacy_of_customer_support_staff - The adequacy of staffing is the ratio of the staff available for work, adjusted by the relative workweek to reflect overtime, to the staff required for operations. Set to neutral prior to operations and zero if no staff are required.

adequacy_of_technical_staff - The adequacy of technical staff is the ratio of the staff available, including the effect of overtime, to the staff required. Adequacy is neutral prior to operations and zero if required staff is zero.

 

required_server_infrastructure[company] = company_in_operation_switch[company] * MAX(MINIMUM_SERVER_INFRASTRUCTURE_REQUIRED, indicated_server_infrastructure[company])

Units: $

The server infrastructure required depends on an indicated level, which depends on the volume of pageviews the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

Uses:

adequacy_of_server_infrastructure - The adequacy of server infrastructure is the ratio of the infrastructure available to the infrastructure required. Set to zero if either the infrastructure required is zero or the firm has not yet begun operations.

authorized_server_infrastructure - The authorized level of server infrastructure depends on the liquidity of the firm.

staff_required_for_site_operation - Technical staff required for site operation is proportional to the server infrastructure required.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_BRAND_EQUITY = 0.25

Units: dimensionless

The sensitivity of the attractiveness of online shopping to the product selection of the firm. The greater the selection, the greater its attractiveness.

Uses:

effect_of_brand_equity_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_CONTENT = 0.2

Units: dimensionless

The sensitivity of the attractiveness of online shopping to the content of the firm's site. The better and greater the content, the greater its attractiveness.

Uses:

effect_of_content_on_attractiveness - The better a firm's content, the greater its attractiveness.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_FULFILLMENT = - 0.4

Units: dimensionless

The sensitivity of the attractiveness of online shopping to the average time required to fill an order. The greater the fulfillment time, the lower its attractiveness.

Uses:

effect_of_fulfillment_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_PRICE = - 2

Units: dimensionless

The sensitivity of the attractiveness of online shopping to the relative price advantage. The cheaper online shopping is relative to brick and mortar shopping, the greater its attractiveness.

Uses:

effect_of_price_on_attractiveness - The attractiveness of online shopping from price. Depends on the effective price of online shopping, including the convenience effect, relative to the brick and mortar price.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_SELECTION = 0.4

Units: dimensionless

The sensitivity of the attractiveness of online shopping to the product selection of the firm. The greater the selection, the greater its attractiveness.

Uses:

effect_of_selection_on_attractiveness - The better a firm's product selection, the more attractive it is.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_SERVICE = 1

Units: dimensionless

The sensitivity of the attractiveness of online shopping to perceived customer service of the firm. The greater the quality of service, the greater its attractiveness.

Uses:

effect_of_service_on_attractiveness - The better a firm's customer service, the more attractive it is.

 

SENSITIVITY_OF_ATTRACTIVENESS_FROM_SITE_PERFORMANCE = 1

Units: dimensionless

The sensitivity of the attractiveness of online shopping to the product selection of the firm. The greater the selection, the greater its attractiveness.

Uses:

effect_of_site_performance_on_attractiveness - The better a firm's site performance, the more attractive it is.

 

SERVER_REQUIREMENTS_PER_PAGEVIEW = 0.08

Units: $*Year/pageview

The cost of server infrastructure required per pageview per year, at the minimum infrastructure scale.

Uses:

indicated_server_infrastructure - The indicated level of server infrastructure depends on the volume of pageviews the firm must process, but is subject to economies of scale. If the economy of scale exponent is 1 there are no scale economies; the smaller the exponent, the greater the scale economies.

 

staff_required_for_customer_support[company] = company_in_operation_switch[company] * MAX(MINIMUM_STAFF_REQUIRED_FOR_CUSTOMER_SUPPORT, indicated_customer_support_staff[company])

Units: Fte

Customer service staff required depends on an indicated level, which depends on the volume of transactions the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

Uses:

adequacy_of_customer_support_staff - The adequacy of staffing is the ratio of the staff available for work, adjusted by the relative workweek to reflect overtime, to the staff required for operations. Set to neutral prior to operations and zero if no staff are required.

required_staff - The number of employees the firm requires is based on the number needed currently, and adjusted by the growth expected between the current time and the time at which the positions are likely to be filled. Not less than the initial number of employees.

schedule_pressure - The ratio of the staff required for customer service or site operations relative to the net experienced FTEs available. Drives the workweek.

 

staff_required_for_site_operation[company] = MAX(MINIMUM_STAFF_REQUIRED_FOR_SITE_OPERATION, FTE_REQUIRED_PER_SERVER * required_server_infrastructure[company])

Units: Fte

Technical staff required for site operation is proportional to the server infrastructure required.

Uses:

adequacy_of_technical_staff - The adequacy of technical staff is the ratio of the staff available, including the effect of overtime, to the staff required. Adequacy is neutral prior to operations and zero if required staff is zero.

required_staff - The number of employees the firm requires is based on the number needed currently, and adjusted by the growth expected between the current time and the time at which the positions are likely to be filled. Not less than the initial number of employees.

schedule_pressure - The ratio of the staff required for customer service or site operations relative to the net experienced FTEs available. Drives the workweek.

 

TIME_TO_PERCEIVE_FULFILLMENT_TIME = 0.125

Units: years

The time required for customers to update their perceptions of order fulfillment time.

Uses:

perceived_fulfillment_time - Customer perceptions about average fulfillment time adjust gradually to actual average fulfillment times.

 

total_market = SUM(sales_revenue[company!])

Units: $/Year

The total market size is the sum of the transaction revenue of the individual companies.

Uses:

marketshare - Market share is calculated by comparing the companies sales revenue to total sales revenue in the industry.

 

total_online_shoppers = SUM(Loyal_Occasional_Buyer[company!]) + SUM(Loyal_High_Volume_Buyer[company!]) + Independent_Occasional_Buyer + Independent_High_Volume_Buyer

Units: People

The total of all online shoppers, over all firms and types of shoppers.

Uses:

awareness_from_word_of_mouth - The number of people trying online shopping as a result of word of mouth. Depends on the contact rate, probability of adoption (adjusted by the relative attractiveness of online shopping) and the probability of having a word of mouth encounter with a current on line shopper.

 

turnover_fraction[company] = MIN(MAXIMUM_CUSTOMER_SWITCH_FRACTION, ZIDZ(NORMAL_DEFECTION_FRACTION, attractiveness_of_online_shopping_to_customers[company]) )

Units: 1/Year

Defection of loyal customers increases as the attractiveness of a firm falls. Must remain less than a maximum rate, and greater than a minimum rate.

Uses:

loss_of_high_volume_buyers - The loss of loyal high-volume shoppers, who become independent shoppers.

loss_of_occasional_buyers - This flow measures the loss of loyal shoppers (they become independent shoppers).

 

********************************

   .Site_operations

********************************

 

adjustment_for_growth_in_required_server_infrastructure[company] = planned_growth_in_transactions[company] * Server_Infrastructure[company]

Units: $/Year

Investment in server infrastructure to account for the anticipated growth in demand. Depends on current server infrastructure and the expected growth rate.

Uses:

server_infrastructure_investment - The firm invests in server infrastructure to (1) replace obsolete servers; (2) grow at the expected rate; and (3) close any gap between desired and actual server infrastructure.

 

adjustment_for_inventory[company] = (desired_inventory[company] - Inventory[company]) /INVENTORY_ADJUSTMENT_TIME[company]

Units: Item/Year

The firm seeks to adjust inventory to the desired level over the inventory adjustment time.

Uses:

indicated_inventory_acquisition - The indicated rate of inventory acquisition is set to replace shipments and adjust the inventory to the desired level.

 

adjustment_for_server_infrastructure[company] = (authorized_server_infrastructure[company] - Server_Infrastructure[company]) /SERVER_INFRASTRUCTURE_ADJUSTMENT_TIME

Units: $/Year

The firm seeks to close the gap between authorized and actual server infrastructure gradually, over a period equal to the adjustment time.

Uses:

server_infrastructure_investment - The firm invests in server infrastructure to (1) replace obsolete servers; (2) grow at the expected rate; and (3) close any gap between desired and actual server infrastructure.

 

ANNUAL_FRACTIONAL_LOSS_OF_BRAND_EQUITY = 0.4

Units: 1/Year

This parameter determines the fraction of brand equity that is lost annually.

Uses:

loss_of_brand_equity - Brand equity depreciates over time. A constant fractional depreciation rate is assumed.

 

ANNUAL_TRANSACTIONS_PER_HIGH_VOLUME_BUYER = 7

Units: transactions/(Year*person)

The number of transactions a typical high volume buyer makes per year.

Uses:

independent_shopper_transactions - Each company captures a fraction of the total number of transactions generated by independent shoppers.

total_transactions - The total transactions of each company is the sum of the transactions generated by each user group.

 

ANNUAL_TRANSACTIONS_PER_OCCASIONAL_BUYER = 1

Units: transactions/(Year*person)

The number of transactions a typical low volume buyer makes per year.

Uses:

independent_shopper_transactions - Each company captures a fraction of the total number of transactions generated by independent shoppers.

total_transactions - The total transactions of each company is the sum of the transactions generated by each user group.

 

authorized_server_infrastructure[company] = required_server_infrastructure[company] * effect_of_liquidity_on_server_infrastructure[company]

Units: $

The authorized level of server infrastructure depends on the liquidity of the firm.

Uses:

adjustment_for_server_infrastructure - The firm seeks to close the gap between authorized and actual server infrastructure gradually, over a period equal to the adjustment time.

 

average_acquisition_cost[company] = BRICK_AND_MORTAR_COGS * RELATIVE_COST_OF_GOODS_SOLD[company]

Units: $/Item

The average acquisition cost of goods for the company. Modeled as a ratio to the COGS (cost of goods sold) for brick and mortar firms, to capture possible scale and scope economies, market power, or other sources of advantage for the internet firm.

Uses:

increase_in_value_of_inventory - The value of the goods added to the firm's inventory.

price - Prices are based on the cost of goods sold and the target gross margin.

value_of_initial_inventory - The value of the firm's initial inventory.

 

average_fulfillment_time[company] = XIDZ(NORMAL_FULFILLMENT_TIME, effect_of_inventory_adequacy_on_fulfillment[company], NORMAL_FULFILLMENT_TIME)

Units: days

The average time required to fulfill an order. Equal to the normal time divided by the effect of inventory adequacy . If inventory falls relative to the desired level, the fulfillment time rises.

Uses:

perceived_fulfillment_time - Customer perceptions about average fulfillment time adjust gradually to actual average fulfillment times.

 

average_order_size[company] = relative_order_size[company] * REFERENCE_ORDER_SIZE

Units: Items/Transaction

Average order size varies with site attractiveness. The average order size is a reference value adjusted by the relative size of orders (compared to the reference), which depends on company attractiveness.

Uses:

orders - Orders is the product of the number of transactions and average order size.

 

AVERAGE_SERVER_LIFE = 3

Units: years

The average useful life of server infrastructure.

Uses:

server_depreciation - Server depreciation depends on the average life of servers.

 

AVERAGE_SPACE_REQUIRED_PER_ITEM = 0.125

Units: Square_feet/Item

The average warehouse space needed per item in inventory.

Uses:

desired_inventory - Desired inventory is determined by the warehouse space available to store it. Although at certain periods it might be higher that the indicated inventory, this is not explicitly modeled since the warehouse space is allowed to decrease fairly rapidly.

desired_warehouse_space - The total space needed by the firm is proportional to inventory needed.

 

AVERAGE_USEFUL_LIFE_OF_CONTENT = 0.25

Units: Year

The average time online content remains relevant before it must be replaced or discarded.

Uses:

content_obsolescence - Content that is no longer relevant is discarded regularly. The average useful life is the mean time a page remains relevant before it must be discarded or replaced.

desired_content_generation_rate - Content generation rate required to maintain the web site up to date; it assumes that the inflow of content generation has to match the content obsolescence rate given the size of the product selection.

 

base_fraction_of_revenue_to_marketing[company] = market_maturity_weight_for_marketing_allocation[company] * INITIAL_FRACTION_OF_REVENUE_TO_MARKETING[company] + (1 - market_maturity_weight_for_marketing_allocation[company]) * MATURE_FRACTION_OF_REVENUE_TO_MARKETING[company]

Units: dimensionless

Fraction of revenue to marketing before adjustment for liquidity, i.e., it reflects the desired fraction of revenue to marketing given the current market maturity. As the market matures, the fraction of revenue to marketing shifts from Initial to the Mature level.

Uses:

fraction_of_revenue_to_marketing - The indicated fraction of revenue allocated to marketing is a function of time for each firm, adjusted by an effect of liquidity.

 

Brand_Equity[company] = INTEG(total_marketing_spending[company] - loss_of_brand_equity[company] + brand_equity_at_beginning_of_operations[company] + free_riding_on_brick_and_mortar_advertising[company], 0)

Units: $

Brand equity is measured in dollars. It increases through advertising spending and through cross-talk (free riding) on the advertising of the brick and mortar competitors. It depreciates at a constant fractional rate.

Uses:

effect_of_brand_equity_on_attractiveness - The better a firm's site performance, the more attractive it is.

loss_of_brand_equity - Brand equity depreciates over time. A constant fractional depreciation rate is assumed.

 

brand_equity_at_beginning_of_operations[company] = PULSE(STARTUP_DATE[company], TIME_STEP) * INITIAL_BRAND_EQUITY[company]/TIME_STEP

Units: $/Year

New entrants can begin operations with a certain initial quantity of brand equity. This flow ensures that the initial brand equity (for example the brand equity derived from an existing bricks-and-mortar operation) is only taken into account after the company begins its online operations.

Uses:

Brand_Equity - Brand equity is measured in dollars. It increases through advertising spending and through cross-talk (free riding) on the advertising of the brick and mortar competitors. It depreciates at a constant fractional rate.

 

breakeven_gross_margin[company] = ZIDZ(indirect_costs_per_unit[company], price[company])

Units: dimensionless

The breakeven gross margin is the ratio of indirect costs per unit (the breakeven gross profit) divided by the price. Zero prior to operations.

 

BRICK_AND_MORTAR_COGS = 40

Units: $/Item

The Cost of procurement for a typical product experienced by a bricks-and-mortar in the relevant industry.

Uses:

average_acquisition_cost - The average acquisition cost of goods for the company. Modeled as a ratio to the COGS (cost of goods sold) for brick and mortar firms, to capture possible scale and scope economies, market power, or other sources of advantage for the internet firm.

brick_and_mortar_price - This formulation calculates the Bricks-and-Mortar Price in relation to which the attractiveness of online prices is established.

 

BRICK_AND_MORTAR_MARGIN = 0.3

Units: dimensionless

This is the assumed gross margin in the bricks-and-mortar industry.

Uses:

brick_and_mortar_price - This formulation calculates the Bricks-and-Mortar Price in relation to which the attractiveness of online prices is established.

 

brick_and_mortar_price = BRICK_AND_MORTAR_COGS/(1 - BRICK_AND_MORTAR_MARGIN)

Units: $/Item

This formulation calculates the Bricks-and-Mortar Price in relation to which the attractiveness of online prices is established.

Uses:

effect_of_price_on_attractiveness - The attractiveness of online shopping from price. Depends on the effective price of online shopping, including the convenience effect, relative to the brick and mortar price.

 

change_in_warehouse_space[company]=IF_THEN_ELSE(desired_warehouse_space[company]<Warehouse_Space[company]:AND:switch_to_enable_warehouse_liquidation[company] = 0, 0, 1) * (desired_warehouse_space[company] - Warehouse_Space[company]) /TIME_TO_ADJUST_WAREHOUSE_SPACE

Units: Square_feet/Year

Warehouse space adjusts to the desired level with a time delay given by the Time to Adjust Warehouse Space. Only enabled after an initial period of time has passed so the firm does not liquidate its warehouse capacity at startup when business volume and hence inventories are low.

Uses:

Warehouse_Space - This stock tracks the warehouse space build by the company.

cost_of_real_estate_infrastructure - The value of new warehouse capacity and real estate added. Must be nonnegative; if real estate is sold, the value of real estate drops by the net book value per unit.

reduction_in_real_estate_value_from_disinvestment - When the firm reduces its real estate holdings (warehouse space), the book value of its real estate holdings is reduced proportionately.

 

Content[company] = INTEG(editorial_content_production[company] + user_generated_content[company] - content_obsolescence[company], 1e - 012)

Units: webpages

Content of the webpages can be self-generated or user-generated. Pages also become obsolete and are deleted. The very small initial condition prevents overflow prior to entry by the company.

Uses:

content_obsolescence - Content that is no longer relevant is discarded regularly. The average useful life is the mean time a page remains relevant before it must be discarded or replaced.

effect_of_content_on_attractiveness - The better a firm's content, the greater its attractiveness.

page_generation_per_user - The contribution of content per user is driven by the amount of content already contributed by other users. The propensity to contribute is a function of the (log10) of the firm's existing content. Active if user generated content is enabled.

 

content_obsolescence[company] = Content[company]/AVERAGE_USEFUL_LIFE_OF_CONTENT

Units: webpages/Year

Content that is no longer relevant is discarded regularly. The average useful life is the mean time a page remains relevant before it must be discarded or replaced.

Uses:

Content - Content of the webpages can be self-generated or user-generated. Pages also become obsolete and are deleted. The very small initial condition prevents overflow prior to entry by the company.

 

cost_of_goods_sold[company] = unit_cost_of_goods_sold[company] * shipments[company]

Units: $/Year

The cost of goods sold is determined by shipments and the average value o f items shipped.

Uses:

Value_Of_Inventory - The value of inventory is augmented by the value of goods acquired and decreased by the value of goods shipped (Cost of Goods Sold).

annualized_quarterly_cogs - Annualized reported quarterly revenue is the accumulated revenue for the last quarter multiplied by four.

gross_margin - The gross margin is the difference between revenue and COGS.

 

cost_of_infrastructure_for_user_generated_content[company] = SWITCH_FOR_USER_GENERATED_CONTENT[company] * USER_GENERATED_INFRASTRUCTURE_COST[company]

Units: $/Year

It is assumed that the facilitation of user-generated content costs a fixed amount annually, no matter how many users use this service.

Uses:

cost_per_user_generated_webpage - The cost per user-generated page is the total cost of the infrastructure permitting user-generated content divided by the rate at which users contribute content. The ZIDZ function returns zero if there is no user-generated content.

total_editorial_cost - Total editorial costs are the sum of costs for self-generated and user-generated content.

 

cost_of_real_estate_infrastructure[company] = MAX(0, COST_OF_WAREHOUSE_SPACE * change_in_warehouse_space[company])

Units: $/Year

The value of new warehouse capacity and real estate added. Must be nonnegative; if real estate is sold, the value of real estate drops by the net book value per unit.

Uses:

increase_in_accounts_payable - All expenses accumulate in accounts payable until they are paid.

real_estate_infrastructure_spending - The book value of the firm's real estate infrastructure increases by the amount of space added at start up and whenever the firm adds space subsequently.

 

COST_OF_WAREHOUSE_SPACE = 30

Units: $/square_foot

The costs per square foot of warehouse space built. Reference point: Pets.com is building a 300.000 SQFT warehouse for $7-9M. (SEC filings).

Uses:

cost_of_real_estate_infrastructure - The value of new warehouse capacity and real estate added. Must be nonnegative; if real estate is sold, the value of real estate drops by the net book value per unit.

initial_investment_in_real_estate - The value of the initial investment in warehouse capacity and real estate.

 

COST_PER_PAGE_CREATED_INHOUSE = 4.3

Units: $/webpage

The production cost per self-generated webpage is assumed a constant.

Uses:

editorial_content_production - This Inflow expresses the creation of self-generated content through editorial staff. Its limited either by the Editorial content, or the amount of content required to support the product selection.

total_editorial_cost - Total editorial costs are the sum of costs for self-generated and user-generated content.

 

cost_per_user_generated_webpage[company] = ZIDZ(cost_of_infrastructure_for_user_generated_content[company], user_generated_content[company])

Units: $/webpage

The cost per user-generated page is the total cost of the infrastructure permitting user-generated content divided by the rate at which users contribute content. The ZIDZ function returns zero if there is no user-generated content.

 

daily_order_volume[company] = recent_orders[company]/DAYS_PER_YEAR

Units: Items/Day

Recent daily sales volume at each firm.

Uses:

effective_order_volume_for_desired_inventory - Desired inventory depends on the number of transactions. The model allows for economies of scale. If the scale effect on desired inventory is one, there is no scale economy; values less than one indicate that desired inventory rises less than proportionately as transactions volume grows.

 

DAYS_PER_YEAR = 365

Units: days/Year

Used to convert annual transactions volume to daily rates for the determination of desired inventory.

Uses:

daily_order_volume - Recent daily sales volume at each firm.

reference_daily_orders - The reference transactions rate determining the scale economy effect on desired inventory, converted to daily rates.

reference_minimum_fulfillment_time - The minimum time required to fill an order.

 

desired_content_generation_rate[company] = product_selection[company] * PAGES_REQUIRED_PER_SKU/AVERAGE_USEFUL_LIFE_OF_CONTENT

Units: webpages/Year

Content generation rate required to maintain the web site up to date; it assumes that the inflow of content generation has to match the content obsolescence rate given the size of the product selection.

Uses:

editorial_content_production - This Inflow expresses the creation of self-generated content through editorial staff. Its limited either by the Editorial content, or the amount of content required to support the product selection.

 

desired_inventory[company] = Warehouse_Space[company]/AVERAGE_SPACE_REQUIRED_PER_ITEM

Units: Items

Desired inventory is determined by the warehouse space available to store it. Although at certain periods it might be higher that the indicated inventory, this is not explicitly modeled since the warehouse space is allowed to decrease fairly rapidly.

Uses:

adjustment_for_inventory - The firm seeks to adjust inventory to the desired level over the inventory adjustment time.

 

desired_inventory_for_warehouse_space[company] = indicated_inventory_for_normal_fulfillment_time[company] * NORMAL_FULFILLMENT_TIME/DESIRED_ORDER_FULFILLMENT_TIME[company]

Units: Items

Desired Inventory for warehouse space. Indicated inventory is adjusted by the ratio of normal to desired order fulfillment time. Shorter desired order fulfillment times increase the required warehouse space.

Uses:

desired_warehouse_space - The total space needed by the firm is proportional to inventory needed.

 

desired_warehouse_space[company] = AVERAGE_SPACE_REQUIRED_PER_ITEM * desired_inventory_for_warehouse_space[company]

Units: Square_feet

The total space needed by the firm is proportional to inventory needed.

Uses:

change_in_warehouse_space - Warehouse space adjusts to the desired level with a time delay given by the Time to Adjust Warehouse Space. Only enabled after an initial period of time has passed so the firm does not liquidate its warehouse capacity at startup when business volume and hence inventories are low.

 

editorial_budget[company] = MAX(MINIMUM_EDITORIAL_BUDGET[company], fraction_of_revenue_to_editorial[company] * recent_sales_revenue[company])

Units: $/Year

The budget for content development is the greater of a minimum rate or a fraction of recent revenue.

Uses:

editorial_content_production - This Inflow expresses the creation of self-generated content through editorial staff. Its limited either by the Editorial content, or the amount of content required to support the product selection.

 

editorial_content_production[company] = MIN(editorial_budget[company]/COST_PER_PAGE_CREATED_INHOUSE, desired_content_generation_rate[company]) * company_in_operation_switch[company]

Units: webpages/Year

This Inflow expresses the creation of self-generated content through editorial staff. Its limited either by the Editorial content, or the amount of content required to support the product selection.

Uses:

Content - Content of the webpages can be self-generated or user-generated. Pages also become obsolete and are deleted. The very small initial condition prevents overflow prior to entry by the company.

total_editorial_cost - Total editorial costs are the sum of costs for self-generated and user-generated content.

 

effect_of_inventory_adequacy_on_fulfillment[company] = MIN(1, XIDZ(Inventory[company], indicated_inventory_for_normal_fulfillment_time[company], 1) )

Units: dimensionless

The ability to fill orders declines as inventory falls below desired levels, but can never be greater than one).

Uses:

average_fulfillment_time - The average time required to fulfill an order. Equal to the normal time divided by the effect of inventory adequacy . If inventory falls relative to the desired level, the fulfillment time rises.

 

effect_of_liquidity_on_editorial[company] = FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_EDITORIAL(perceived_liquidity[company])

Units: dimensionless

The fraction of revenue allocated to editorial and content development drops as liquidity falls.

Uses:

fraction_of_revenue_to_editorial - The fraction of recent revenue allocated to editorial and content development. Falls as liquidity drops.

 

effect_of_liquidity_on_marketing[company] = FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_MARKETING(perceived_liquidity[company])

Units: dimensionless

Low liquidity force the firm to cut back on marketing.

Uses:

fraction_of_revenue_to_marketing - The indicated fraction of revenue allocated to marketing is a function of time for each firm, adjusted by an effect of liquidity.

 

effect_of_liquidity_on_server_infrastructure[company] = FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_INFRASTRUCTURE(perceived_liquidity[company])

Units: dimensionless

Low liquidity force the firm to reduce server infrastructure.

Uses:

authorized_server_infrastructure - The authorized level of server infrastructure depends on the liquidity of the firm.

 

effect_of_product_selection_on_desired_inventory[company] = (product_selection[company]/REFERENCE_SKUS) ^PRODUCT_VARIETY_EFFECT_ON_DESIRED_INVENTORY

Units: dimensionless

The inventory needed to fill orders in the normal time rises with the number of SKUs the firm stocks, but less than proportionately, reflecting the distribution of demand for SKUs (an economy of scope).

Uses:

indicated_inventory_for_normal_fulfillment_time - The inventory level the firm requires to fulfill orders within the normal fulfillment time. Desired inventory rises with transactions volume and with product variety, but perhaps less than linearly to capture scale and scope economies.

 

effective_order_volume_for_desired_inventory[company] = reference_daily_orders * (daily_order_volume[company]/reference_daily_orders) ^SCALE_EFFECT_ON_DESIRED_INVENTORY

Units: Items/Day

Desired inventory depends on the number of transactions. The model allows for economies of scale. If the scale effect on desired inventory is one, there is no scale economy; values less than one indicate that desired inventory rises less than proportionately as transactions volume grows.

Uses:

indicated_inventory_for_normal_fulfillment_time - The inventory level the firm requires to fulfill orders within the normal fulfillment time. Desired inventory rises with transactions volume and with product variety, but perhaps less than linearly to capture scale and scope economies.

 

EFFECTIVENESS_OF_FREE_RIDING = 0.1

Units: dimensionless

Captures the impact of a parent Brick and Mortar firm's advertising on the brand equity of its online division. A factor of 1 would indicate brick and mortar ads are just as effective in building the online division's brand equity as dedicated ads promoting the online division. A value of 0 would indicate no impact of ad spending by the B&M parent on the online divisions' brand equity.

Uses:

free_riding_on_brick_and_mortar_advertising - Some online retailers have brick-and-mortar parent companies who can promote their on line operations through existing advertising campaigns that impost no cost on the online division. Only some of the brick and mortar advertising, however, contributes to the brand equity of the online division.

 

fraction_of_orders_filled[company] = TABLE_FOR_FRACTION_OF_ORDERS_FILLED(XIDZ(maximum_shipment_rate[company], orders[company], 10) )

Units: dimensionless

The fraction of orders filled is a function of the ratio of the potential (maximum) shipment rate to the order rate. If orders are zero, function takes a large input (10), which returns 1 for fraction of orders shipped.

Uses:

shipments - Shipments is a fraction of orders placed.

 

fraction_of_revenue_to_editorial[company] = TARGET_FRACTION_OF_REVENUE_TO_EDITORIAL[company] * effect_of_liquidity_on_editorial[company]

Units: dimensionless

The fraction of recent revenue allocated to editorial and content development. Falls as liquidity drops.

Uses:

editorial_budget - The budget for content development is the greater of a minimum rate or a fraction of recent revenue.

 

fraction_of_revenue_to_marketing[company] = effect_of_liquidity_on_marketing[company] * base_fraction_of_revenue_to_marketing[company]

Units: dimensionless

The indicated fraction of revenue allocated to marketing is a function of time for each firm, adjusted by an effect of liquidity.

Uses:

total_marketing_spending - Total marketing expenditures are determined by a fraction of sales, but are not less than a minimum rate. Marketing begins only after the firm enters the market.

 

free_riding_on_brick_and_mortar_advertising[company] = BRICK_AND_MORTAR_ADVERTISING[company] * EFFECTIVENESS_OF_FREE_RIDING * company_in_operation_switch[company]

Units: $/Year

Some online retailers have brick-and-mortar parent companies who can promote their on line operations through existing advertising campaigns that impost no cost on the online division. Only some of the brick and mortar advertising, however, contributes to the brand equity of the online division.

Uses:

Brand_Equity - Brand equity is measured in dollars. It increases through advertising spending and through cross-talk (free riding) on the advertising of the brick and mortar competitors. It depreciates at a constant fractional rate.

 

FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_EDITORIAL([(0,0)-(2,1.5)],(0,0),(0.2,0.4),(0.4,0.7),(0.6,0.87),(0.8,0.95),(1,1),(1.2,1.05),(1.4,1.09),(1.6,1.12),(1.8,1.14),(2,1.15),(1000,1.15))

Units: dimensionless

The fraction of recent revenue allocated to content development drops as the firm's liquidity falls. The effect is small near normal liquidity levels, but much stronger when cash is very low.

Uses:

effect_of_liquidity_on_editorial - The fraction of revenue allocated to editorial and content development drops as liquidity falls.

 

FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_INFRASTRUCTURE([(0,0.4)-(1,1)],(0,0.6),(0.1,0.8),(0.2,0.95),(0.3,1),(1,1),(1000,1))

Units: dimensionless

Low liquidity forces the firm to cut back on server infrastructure.

Uses:

effect_of_liquidity_on_server_infrastructure - Low liquidity force the firm to reduce server infrastructure.

 

FUNCTION_FOR_EFFECT_OF_LIQUIDITY_ON_MARKETING([(0,0)-(1,1)],(0,0),(0.2,0.5),(0.4,0.8),(0.6,0.9),(0.8,0.98),(1,1),(1000,1))

Units: dimensionless

Low liquidity forces the firm to cut the fraction of revenue it plans to spend on marketing.

Uses:

effect_of_liquidity_on_marketing - Low liquidity force the firm to cut back on marketing.

 

FUNCTION_FOR_MARKET_ALLOCATION([(0,0)-(1,1)],(0,1),(0.4,1),(0.6,1),(0.65,0.95),(0.7,0.85),(0.8,0.5),(0.9,0.15),(0.95,0.05),(1,0))

Units: dimensionless

Lookup function that determines the fraction of revenue allocated to marketing depending on the market maturity.

Uses:

market_maturity_weight_for_marketing_allocation - Policy to reduce the fraction of revenues to marketing depending on market maturity. The assumption is that as the market reaches maturity, it will not be necessary to spend as much in marketing.

 

FUNCTION_FOR_RELATIVE_ORDER_SIZE([(0,1)-(5,1.5)],(0,1),(1,1),(2,1.1),(2.5,1.2),(3,1.3),(3.5,1.4),(4,1.45),(5,1.5),(100,1.5))

Units: dimensionless

The average order size grows with the attractiveness of the firm, but at diminishing rates and only up to some maximum value.

Uses:

relative_order_size - The average order size relative to a reference is an increasing function of firm attractiveness.

 

FUNCTION_FOR_USER_PROPENSITY_TO_CONTRIBUTE_CONTENT([(0,0)-(8,1)],(-5,0.1),(5,0.1),(7,0.8),(8,1),(12,1))

Units: dimensionless

Users are more likely to contribute pages to sites that already have significant user content.

Uses:

page_generation_per_user - The contribution of content per user is driven by the amount of content already contributed by other users. The propensity to contribute is a function of the (log10) of the firm's existing content. Active if user generated content is enabled.

 

increase_in_value_of_inventory[company] = average_acquisition_cost[company] * inventory_acquisition[company]

Units: $/Year

The value of the goods added to the firm's inventory.

Uses:

Value_Of_Inventory - The value of inventory is augmented by the value of goods acquired and decreased by the value of goods shipped (Cost of Goods Sold).

increase_in_accounts_payable - All expenses accumulate in accounts payable until they are paid.

 

independent_shopper_pageviews[company] = attractiveness_share[company] * (Independent_High_Volume_Buyer * PAGEVIEWS_PER_HIGH_VOLUME_SHOPPER + Independent_Occasional_Buyer * PAGEVIEWS_PER_OCCASIONAL_SHOPPER)

Units: Pageviews/Year

Each company captures a fraction of the total number of pageviews generated by independent shoppers.

Uses:

total_pageviews - The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

 

independent_shopper_transactions[company] = attractiveness_share[company] * (ANNUAL_TRANSACTIONS_PER_HIGH_VOLUME_BUYER * Independent_High_Volume_Buyer + ANNUAL_TRANSACTIONS_PER_OCCASIONAL_BUYER * Independent_Occasional_Buyer)

Units: transactions/Year

Each company captures a fraction of the total number of transactions generated by independent shoppers.

Uses:

total_transactions - The total transactions of each company is the sum of the transactions generated by each user group.

 

indicated_inventory_acquisition[company] = shipments[company] + adjustment_for_inventory[company]

Units: Items/Year

The indicated rate of inventory acquisition is set to replace shipments and adjust the inventory to the desired level.

Uses:

inventory_acquisition - Inventory acquisition is the indicated rate, constrained to be nonnegative. Zero prior to start of operations.

 

indicated_inventory_for_normal_fulfillment_time[company] = REFERENCE_INVENTORY_COVERAGE * effective_order_volume_for_desired_inventory[company] * effect_of_product_selection_on_desired_inventory[company]

Units: Items

The inventory level the firm requires to fulfill orders within the normal fulfillment time. Desired inventory rises with transactions volume and with product variety, but perhaps less than linearly to capture scale and scope economies.

Uses:

desired_inventory_for_warehouse_space - Desired Inventory for warehouse space. Indicated inventory is adjusted by the ratio of normal to desired order fulfillment time. Shorter desired order fulfillment times increase the required warehouse space.

effect_of_inventory_adequacy_on_fulfillment - The ability to fill orders declines as inventory falls below desired levels, but can never be greater than one).

 

indirect_costs_per_unit[company] = ZIDZ(operating_expenses[company] + depreciation[company], orders[company])

Units: $/Item

The indirect costs of operation per unit ordered. Zero prior to operations.

Uses:

breakeven_gross_margin - The breakeven gross margin is the ratio of indirect costs per unit (the breakeven gross profit) divided by the price. Zero prior to operations.

 

initial_investment_in_real_estate[company] = warehouse_space_added_at_start_of_operations[company] * COST_OF_WAREHOUSE_SPACE

Units: $/Year

The value of the initial investment in warehouse capacity and real estate.

Uses:

real_estate_infrastructure_spending - The book value of the firm's real estate infrastructure increases by the amount of space added at start up and whenever the firm adds space subsequently.

sale_of_equity - The Inflow to the Sale of equity is determined by the initial funding and other money raised.

 

initial_investment_in_server_infrastructure[company] = PULSE(STARTUP_DATE[company], TIME_STEP) * INITIAL_SERVER_INFRASTRUCTURE[company]/TIME_STEP

Units: $/Year

At startup the firm acquires a certain initial server infrastructure.

Uses:

Server_Infrastructure - Server infrastructure is a stock increased through investments and decreased through depreciation. At startup the firm receives an initial infrastructure.

sale_of_equity - The Inflow to the Sale of equity is determined by the initial funding and other money raised.

 

Inventory[company] = INTEG(inventory_acquisition[company] - shipments[company], 0)

Units: Items

The product inventory, increased by acquisitions and decreased by shipments.

Uses:

adjustment_for_inventory - The firm seeks to adjust inventory to the desired level over the inventory adjustment time.

effect_of_inventory_adequacy_on_fulfillment - The ability to fill orders declines as inventory falls below desired levels, but can never be greater than one).

maximum_shipment_rate - The maximum rate at which the firm can fill orders, given its inventory and fulfillment technology.

unit_cost_of_goods_sold - The average value of the items in the firm's inventory. Returns 0 if inventory is zero.

value_of_initial_inventory - The value of the firm's initial inventory.

 

inventory_acquisition[company] = STEP(1, STARTUP_DATE[company]) * MAX(0, indicated_inventory_acquisition[company])

Units: Items/Year

Inventory acquisition is the indicated rate, constrained to be nonnegative. Zero prior to start of operations.

Uses:

Inventory - The product inventory, increased by acquisitions and decreased by shipments.

increase_in_value_of_inventory - The value of the goods added to the firm's inventory.

 

INVENTORY_ADJUSTMENT_TIME[company] = 0.0833333

Units: years

The inventory adjustment time is the time period over which the firm seeks to bring inventory in line with desired inventory.

Uses:

adjustment_for_inventory - The firm seeks to adjust inventory to the desired level over the inventory adjustment time.

 

inventory_costs[company] = (product_selection[company] * INVENTORY_COSTS_PER_SKU + warehouse_maintenance_costs[company]) * company_in_operation_switch[company]

Units: $/Year

Inventory costs depend on the number of SKUs and warehouse maintenance costs. Costs are incurred only after the firm begins operations.

Uses:

marketing_and_sales - Marketing and sales expense consists of marketing spending plus the costs of customer support and inventory.

operating_expenses - Operating expenses are the sum of all expenses except taxes and depreciation.

 

INVENTORY_COSTS_PER_SKU = 4

Units: $/(Year*Sku)

Inventory costs per SKU/year.

Uses:

inventory_costs - Inventory costs depend on the number of SKUs and warehouse maintenance costs. Costs are incurred only after the firm begins operations.

 

loss_of_brand_equity[company] = Brand_Equity[company] * ANNUAL_FRACTIONAL_LOSS_OF_BRAND_EQUITY

Units: $/Year

Brand equity depreciates over time. A constant fractional depreciation rate is assumed.

Uses:

Brand_Equity - Brand equity is measured in dollars. It increases through advertising spending and through cross-talk (free riding) on the advertising of the brick and mortar competitors. It depreciates at a constant fractional rate.

 

MAINTENANCE_COSTS_PER_SQUARE_FOOT = 30

Units: $/(Year*square_foot)

It is assumed that maintenance of the warehouses costs about 1$ per Square foot per Year.

Uses:

warehouse_maintenance_costs - Warehouse maintenance costs are assessed based on the size of warehouses used.

 

market_maturity_weight_for_marketing_allocation[company] = FUNCTION_FOR_MARKET_ALLOCATION(recent_sales_revenue[company]/REFERENCE_SALES_FOR_MATURE_MARKET)

Units: dimensionless

Policy to reduce the fraction of revenues to marketing depending on market maturity. The assumption is that as the market reaches maturity, it will not be necessary to spend as much in marketing.

Uses:

base_fraction_of_revenue_to_marketing - Fraction of revenue to marketing before adjustment for liquidity, i.e., it reflects the desired fraction of revenue to marketing given the current market maturity. As the market matures, the fraction of revenue to marketing shifts from Initial to the Mature level.

 

MATURE_FRACTION_OF_REVENUE_TO_MARKETING[company] = 0.1

Units: dimensionless

Fraction of revenue to marketing when market reaches maturity, this is a floor for marketing expenses.

Uses:

base_fraction_of_revenue_to_marketing - Fraction of revenue to marketing before adjustment for liquidity, i.e., it reflects the desired fraction of revenue to marketing given the current market maturity. As the market matures, the fraction of revenue to marketing shifts from Initial to the Mature level.

 

MAXIMUM_PAGE_GENERATION_PER_USER[company] = 1

Units: webpages/(Year*person)

The maximum number of user-generated pages per user per year, on average.

Uses:

page_generation_per_user - The contribution of content per user is driven by the amount of content already contributed by other users. The propensity to contribute is a function of the (log10) of the firm's existing content. Active if user generated content is enabled.

 

maximum_shipment_rate[company] = Inventory[company]/minimum_fulfillment_time[company]

Units: Items/Year

The maximum rate at which the firm can fill orders, given its inventory and fulfillment technology.

Uses:

fraction_of_orders_filled - The fraction of orders filled is a function of the ratio of the potential (maximum) shipment rate to the order rate. If orders are zero, function takes a large input (10), which returns 1 for fraction of orders shipped.

 

minimum_fulfillment_time[company] = MAX(reference_minimum_fulfillment_time[company], TIME_STEP)

Units: Year

The minimum time required to fill an order. Set to the maximum of the reference value or the simulation time step to prevent integration error.

Uses:

maximum_shipment_rate - The maximum rate at which the firm can fill orders, given its inventory and fulfillment technology.

 

NORMAL_FULFILLMENT_TIME = 2

Units: days

The normal average fulfillment time for orders.

Uses:

average_fulfillment_time - The average time required to fulfill an order. Equal to the normal time divided by the effect of inventory adequacy . If inventory falls relative to the desired level, the fulfillment time rises.

desired_inventory_for_warehouse_space - Desired Inventory for warehouse space. Indicated inventory is adjusted by the ratio of normal to desired order fulfillment time. Shorter desired order fulfillment times increase the required warehouse space.

reference_minimum_fulfillment_time - The minimum time required to fill an order.

 

ORDER_REPORTING_TIME = 0.25

Units: Year

The time period over which order volume is reported and averaged.

Uses:

recent_orders - Recent orders, used to determine desired inventory, lag current orders due to reporting and planning delays (the firm seeks to smooth temporary variations in order volume to estimate average volume).

 

orders[company] = average_order_size[company] * total_transactions[company]

Units: Items/Year

Orders is the product of the number of transactions and average order size.

Uses:

fraction_of_orders_filled - The fraction of orders filled is a function of the ratio of the potential (maximum) shipment rate to the order rate. If orders are zero, function takes a large input (10), which returns 1 for fraction of orders shipped.

indirect_costs_per_unit - The indirect costs of operation per unit ordered. Zero prior to operations.

recent_orders - Recent orders, used to determine desired inventory, lag current orders due to reporting and planning delays (the firm seeks to smooth temporary variations in order volume to estimate average volume).

shipments - Shipments is a fraction of orders placed.

variable_g&a_expense - The variable component of administrative overhead depends on order volume.

 

page_generation_per_user[company] = SWITCH_FOR_USER_GENERATED_CONTENT[company] * MAXIMUM_PAGE_GENERATION_PER_USER[company] * FUNCTION_FOR_USER_PROPENSITY_TO_CONTRIBUTE_CONTENT(LOG(Content[company], 10) )

Units: webpages/(Year*person)

The contribution of content per user is driven by the amount of content already contributed by other users. The propensity to contribute is a function of the (log10) of the firm's existing content. Active if user generated content is enabled.

Uses:

user_generated_content - New user-generated content is created based on the number of users and the contribution per user. Content contributed from independent shoppers is not considered, as a simplifying assumption.

 

PAGES_REQUIRED_PER_SKU = 1.1

Units: webpages/Skus

Number of pages of content required per SKU carried. This number should be greater than one as at least product characteristics need to be captured for future display.

Uses:

desired_content_generation_rate - Content generation rate required to maintain the web site up to date; it assumes that the inflow of content generation has to match the content obsolescence rate given the size of the product selection.

reference_content_for_customer_choice - The reference level of content used in customer decisions to frequent a site.

 

PAGEVIEWS_PER_HIGH_VOLUME_SHOPPER = 200

Units: Pageviews/(Year*person)

The average number of pageviews generated per year by each occasional buyer.

Uses:

independent_shopper_pageviews - Each company captures a fraction of the total number of pageviews generated by independent shoppers.

total_pageviews - The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

 

PAGEVIEWS_PER_OCCASIONAL_SHOPPER = 100

Units: Pageviews/(Year*person)

The average number of pageviews generated per year by each occasional buyer.

Uses:

independent_shopper_pageviews - Each company captures a fraction of the total number of pageviews generated by independent shoppers.

total_pageviews - The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

 

PAGEVIEWS_PER_POTENTIAL_SHOPPER = 100

Units: Pageviews/(Year*person)

The average number of pageviews generated by each potential online shopper.

Uses:

potential_shopper_pageviews - Each potential online shopper generates a certain number of pageviews, allocated to each company in proportion to their attractiveness share. Note that we are assuming that potential shoppers have access to the relative attractiveness of each firm through brand equity advertising and word of mouth effects.

 

potential_shopper_pageviews[company] = attractiveness_share[company] * Browsers * PAGEVIEWS_PER_POTENTIAL_SHOPPER

Units: Pageviews/Year

Each potential online shopper generates a certain number of pageviews, allocated to each company in proportion to their attractiveness share. Note that we are assuming that potential shoppers have access to the relative attractiveness of each firm through brand equity advertising and word of mouth effects.

Uses:

total_pageviews - The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

 

price[company] = company_in_operation_switch[company] * average_acquisition_cost[company]/(1 - TARGET_GROSS_MARGIN[company])

Units: $/Item

Prices are based on the cost of goods sold and the target gross margin.

Uses:

breakeven_gross_margin - The breakeven gross margin is the ratio of indirect costs per unit (the breakeven gross profit) divided by the price. Zero prior to operations.

effective_price - The effective price of online shopping, after including the convenience effect. Not lower than a minimum price to prevent overflow in the attractiveness formulation.

sales_revenue - Revenue is recognized when items ship.

 

product_selection[company] = SMOOTH3I(DESIRED_PRODUCT_SELECTION[company], time_to_change_product_selection[company], INITIAL_PRODUCT_SELECTION[company])

Units: Skus

The number of products offered by the online retailer. Reference: Amazon reached 2.5 M books on March 17, 1997 (HBS case) and 4.5 M titles in late 1999 (Gomez advisors).

Uses:

desired_content_generation_rate - Content generation rate required to maintain the web site up to date; it assumes that the inflow of content generation has to match the content obsolescence rate given the size of the product selection.

effect_of_product_selection_on_desired_inventory - The inventory needed to fill orders in the normal time rises with the number of SKUs the firm stocks, but less than proportionately, reflecting the distribution of demand for SKUs (an economy of scope).

effect_of_selection_on_attractiveness - The better a firm's product selection, the more attractive it is.

inventory_costs - Inventory costs depend on the number of SKUs and warehouse maintenance costs. Costs are incurred only after the firm begins operations.

 

PRODUCT_VARIETY_EFFECT_ON_DESIRED_INVENTORY = 1

Units: dimensionless

Controls the effects of variety on desired inventory. A value of one indicates that desired inventory is directly proportional to product variety (the number of SKUs). Values less than one indicate economies of scope (desired inventory rises less than proportionately as variety increases).

Uses:

effect_of_product_selection_on_desired_inventory - The inventory needed to fill orders in the normal time rises with the number of SKUs the firm stocks, but less than proportionately, reflecting the distribution of demand for SKUs (an economy of scope).

 

real_estate_depreciation[company] = Real_Estate_Infrastructure[company] * REAL_ESTATE_DEPRECIATION_RATE

Units: $/Year

Depreciation of real estate is assumed to occur at a constant fractional rate.

Uses:

Real_Estate_Infrastructure - The book value of the Real Estate investment based on expenses incurred less depreciation and the reduction in book value from sale of real estate.

depreciation - Total depreciation is depreciation of server infrastructure plus real estate depreciation.

 

REAL_ESTATE_DEPRECIATION_RATE = 0.1

Units: 1/Year

The fractional depreciation rate for the firm's real estate.

Uses:

real_estate_depreciation - Depreciation of real estate is assumed to occur at a constant fractional rate.

 

Real_Estate_Infrastructure[company] = INTEG(real_estate_infrastructure_spending[company] - real_estate_depreciation[company] - reduction_in_real_estate_value_from_disinvestment[company], 0)

Units: $

The book value of the Real Estate investment based on expenses incurred less depreciation and the reduction in book value from sale of real estate.

Uses:

breakup_value - The minimum value of the firm is its breakup or liquidation value, given by its cash, plus a fraction of its nonliquid assets, less its liabilities. The Salvage Value Ratio is typically < 1 because the firm will realize less than book value for its assets if forced to liquidate them. Breakup value is not less than zero.

real_estate_depreciation - Depreciation of real estate is assumed to occur at a constant fractional rate.

total_assets - This accounting formula measures Total assets.

unit_value_of_real_estate - The average book value of the firm's real estate is the ratio of total book value to real estate. Zero prior to operations.

 

real_estate_infrastructure_spending[company] = cost_of_real_estate_infrastructure[company] + initial_investment_in_real_estate[company]

Units: $/Year

The book value of the firm's real estate infrastructure increases by the amount of space added at start up and whenever the firm adds space subsequently.

Uses:

Real_Estate_Infrastructure - The book value of the Real Estate investment based on expenses incurred less depreciation and the reduction in book value from sale of real estate.

 

recent_orders[company] = SMOOTHI(orders[company], ORDER_REPORTING_TIME, 0)

Units: Items/Year

Recent orders, used to determine desired inventory, lag current orders due to reporting and planning delays (the firm seeks to smooth temporary variations in order volume to estimate average volume).

Uses:

daily_order_volume - Recent daily sales volume at each firm.

 

reduction_in_real_estate_value_from_disinvestment[company] = unit_value_of_real_estate[company] * MAX(0, - change_in_warehouse_space[company])

Units: $/Year

When the firm reduces its real estate holdings (warehouse space), the book value of its real estate holdings is reduced proportionately.

Uses:

Real_Estate_Infrastructure - The book value of the Real Estate investment based on expenses incurred less depreciation and the reduction in book value from sale of real estate.

net_loss_on_sale_of_assets - The loss on sale of assets (server infrastructure or real estate) is the reduction in their book value less any cash realized on their sale.

proceeds_from_real_estate_disinvestment - When the firm liquidates excess real estate holdings it receives only a fraction of the book value.

 

reference_daily_orders = REFERENCE_ORDERS/DAYS_PER_YEAR

Units: Items/Day

The reference transactions rate determining the scale economy effect on desired inventory, converted to daily rates.

Uses:

effective_order_volume_for_desired_inventory - Desired inventory depends on the number of transactions. The model allows for economies of scale. If the scale effect on desired inventory is one, there is no scale economy; values less than one indicate that desired inventory rises less than proportionately as transactions volume grows.

 

REFERENCE_INVENTORY_COVERAGE = 10

Units: days

The number of days worth of transactions the firm needs, on average, to be able to fulfill items within the normal fulfillment time. Depends on restocking delays, demand variability, and carrying costs.

Uses:

indicated_inventory_for_normal_fulfillment_time - The inventory level the firm requires to fulfill orders within the normal fulfillment time. Desired inventory rises with transactions volume and with product variety, but perhaps less than linearly to capture scale and scope economies.

 

reference_minimum_fulfillment_time[company] = NORMAL_FULFILLMENT_TIME/DAYS_PER_YEAR

Units: years

The minimum time required to fill an order.

Uses:

minimum_fulfillment_time - The minimum time required to fill an order. Set to the maximum of the reference value or the simulation time step to prevent integration error.

 

REFERENCE_ORDER_SIZE = 1

Units: Items/Transaction

The reference number of items purchased per transaction.

Uses:

average_order_size - Average order size varies with site attractiveness. The average order size is a reference value adjusted by the relative size of orders (compared to the reference), which depends on company attractiveness.

 

REFERENCE_ORDERS = 1e + 007

Units: Items/Year

The reference transactions rate determining the scale economy effect on desired inventory.

Uses:

reference_daily_orders - The reference transactions rate determining the scale economy effect on desired inventory, converted to daily rates.

 

REFERENCE_SALES_FOR_MATURE_MARKET = 3e + 009

Units: $/Year

Estimated size of the mature market for the industry.

Uses:

market_maturity_weight_for_marketing_allocation - Policy to reduce the fraction of revenues to marketing depending on market maturity. The assumption is that as the market reaches maturity, it will not be necessary to spend as much in marketing.

 

REFERENCE_SKUS = 550000

Units: Skus

The reference level of product variety. When product variety equals its reference value, the effect of selection on desired inventory is neutral (1).

Uses:

effect_of_product_selection_on_desired_inventory - The inventory needed to fill orders in the normal time rises with the number of SKUs the firm stocks, but less than proportionately, reflecting the distribution of demand for SKUs (an economy of scope).

 

RELATIVE_COST_OF_GOODS_SOLD[company] = 1

Units: dimensionless

The ratio of the unit cost of goods sold by the firm to the cost for traditional brick and mortar competitors.

Uses:

average_acquisition_cost - The average acquisition cost of goods for the company. Modeled as a ratio to the COGS (cost of goods sold) for brick and mortar firms, to capture possible scale and scope economies, market power, or other sources of advantage for the internet firm.

 

relative_order_size[company] = FUNCTION_FOR_RELATIVE_ORDER_SIZE(attractiveness_of_online_shopping_to_customers[company])

Units: dimensionless

The average order size relative to a reference is an increasing function of firm attractiveness.

Uses:

average_order_size - Average order size varies with site attractiveness. The average order size is a reference value adjusted by the relative size of orders (compared to the reference), which depends on company attractiveness.

 

SCALE_EFFECT_ON_DESIRED_INVENTORY = 0.3

Units: dimensionless

Controls the strength of the scale economy for desired inventory. Smaller values (>0) indicate stronger scale economies. A value of 1 indicates no scale economy.

Uses:

effective_order_volume_for_desired_inventory - Desired inventory depends on the number of transactions. The model allows for economies of scale. If the scale effect on desired inventory is one, there is no scale economy; values less than one indicate that desired inventory rises less than proportionately as transactions volume grows.

 

server_depreciation[company] = Server_Infrastructure[company]/AVERAGE_SERVER_LIFE

Units: $/Year

Server depreciation depends on the average life of servers.

Uses:

Server_Infrastructure - Server infrastructure is a stock increased through investments and decreased through depreciation. At startup the firm receives an initial infrastructure.

depreciation - Total depreciation is depreciation of server infrastructure plus real estate depreciation.

server_infrastructure_investment - The firm invests in server infrastructure to (1) replace obsolete servers; (2) grow at the expected rate; and (3) close any gap between desired and actual server infrastructure.

 

Server_Infrastructure[company] = INTEG(server_infrastructure_investment[company] - server_depreciation[company] + initial_investment_in_server_infrastructure[company], 0)

Units: $

Server infrastructure is a stock increased through investments and decreased through depreciation. At startup the firm receives an initial infrastructure.

Uses:

adequacy_of_server_infrastructure - The adequacy of server infrastructure is the ratio of the infrastructure available to the infrastructure required. Set to zero if either the infrastructure required is zero or the firm has not yet begun operations.

adjustment_for_growth_in_required_server_infrastructure - Investment in server infrastructure to account for the anticipated growth in demand. Depends on current server infrastructure and the expected growth rate.

adjustment_for_server_infrastructure - The firm seeks to close the gap between authorized and actual server infrastructure gradually, over a period equal to the adjustment time.

breakup_value - The minimum value of the firm is its breakup or liquidation value, given by its cash, plus a fraction of its nonliquid assets, less its liabilities. The Salvage Value Ratio is typically < 1 because the firm will realize less than book value for its assets if forced to liquidate them. Breakup value is not less than zero.

server_depreciation - Server depreciation depends on the average life of servers.

total_assets - This accounting formula measures Total assets.

 

SERVER_INFRASTRUCTURE_ADJUSTMENT_TIME = 0.25

Units: years

The average time required to acquire and deploy new server infrastructure.

Uses:

adjustment_for_server_infrastructure - The firm seeks to close the gap between authorized and actual server infrastructure gradually, over a period equal to the adjustment time.

 

server_infrastructure_investment[company] = server_depreciation[company] + adjustment_for_growth_in_required_server_infrastructure[company] + adjustment_for_server_infrastructure[company]

Units: $/Year

The firm invests in server infrastructure to (1) replace obsolete servers; (2) grow at the expected rate; and (3) close any gap between desired and actual server infrastructure.

Uses:

Server_Infrastructure - Server infrastructure is a stock increased through investments and decreased through depreciation. At startup the firm receives an initial infrastructure.

cost_per_pageview - The average cost per pageview is the ratio of the sum of engineering and server infrastructure costs to total pageviews.

reduction_in_server_infrastructure_from_disinvestment - The reduction in server infrastructure is the magnitude of the negative part of server infrastructure investment.

server_investment - The cost of any server infrastructure acquired. Must be nonnegative; when the firm liquidates server capacity it receives less than its book value per unit.

 

shipments[company] = fraction_of_orders_filled[company] * orders[company]

Units: Items/Year

Shipments is a fraction of orders placed.

Uses:

Inventory - The product inventory, increased by acquisitions and decreased by shipments.

cost_of_goods_sold - The cost of goods sold is determined by shipments and the average value o f items shipped.

indicated_inventory_acquisition - The indicated rate of inventory acquisition is set to replace shipments and adjust the inventory to the desired level.

sales_revenue - Revenue is recognized when items ship.

 

STANDARD_TIME_TO_CHANGE_PRODUCT_SELECTION = 2

Units: years

The normal time required to change product selection.

Uses:

time_to_change_product_selection - The time required to achieve the desired level of product selection. Infinite if the company is not in operation.

 

SWITCH_FOR_USER_GENERATED_CONTENT[company] = 1

Units: dimensionless

Enables user-generated content.

Uses:

cost_of_infrastructure_for_user_generated_content - It is assumed that the facilitation of user-generated content costs a fixed amount annually, no matter how many users use this service.

page_generation_per_user - The contribution of content per user is driven by the amount of content already contributed by other users. The propensity to contribute is a function of the (log10) of the firm's existing content. Active if user generated content is enabled.

 

switch_to_enable_warehouse_liquidation[company] = IF_THEN_ELSE(Time<year_to_enable_warehouse_liquidation[company], 0, 1)

Units: dimensionless

Prior to a specified year the firm will not liquidate its warehouse capacity if there is excess space (prevents liquidation at startup when sales are low).

Uses:

change_in_warehouse_space - Warehouse space adjusts to the desired level with a time delay given by the Time to Adjust Warehouse Space. Only enabled after an initial period of time has passed so the firm does not liquidate its warehouse capacity at startup when business volume and hence inventories are low.

 

TABLE_FOR_FRACTION_OF_ORDERS_FILLED([(0,0)-(2,1)],(0,0),(0.25,0.25),(0.5,0.5),(0.75,0.75),(1,1),(2,1))

Units: dimensionless

The nonlinear function relating order fulfillment fraction to inventory and orders.

Uses:

fraction_of_orders_filled - The fraction of orders filled is a function of the ratio of the potential (maximum) shipment rate to the order rate. If orders are zero, function takes a large input (10), which returns 1 for fraction of orders shipped.

 

TARGET_FRACTION_OF_REVENUE_TO_EDITORIAL[company] = 0.05

Units: dimensionless

The fraction of revenue the firm would like to allocate to content development.

Uses:

fraction_of_revenue_to_editorial - The fraction of recent revenue allocated to editorial and content development. Falls as liquidity drops.

 

TARGET_GROSS_MARGIN[company] = 0.2

Units: dimensionless

The target gross margin is assumed constant as a simple way to capture GBF vs. profit oriented pricing strategy.

Uses:

price - Prices are based on the cost of goods sold and the target gross margin.

 

TIME_TO_ACHIEVE_EXPECTED_VOLUME = 5

Units: years

The time period during which the firm accepts excess warehouse capacity in the belief that business volume will grow enough to justify their initial investment in warehouse space.

Uses:

year_to_enable_warehouse_liquidation - Prior to this time the firm will not liquidate any excess warehouse space (they wait for volume to rise to justify filling the warehouse). The time to achieve expected volume represents the time horizon over which the firm is willing to accept excess warehouse capacity without rationalizing it.

 

TIME_TO_ADJUST_WAREHOUSE_SPACE = 2

Units: Year

The delay in adjusting warehouse space to the desired level.

Uses:

change_in_warehouse_space - Warehouse space adjusts to the desired level with a time delay given by the Time to Adjust Warehouse Space. Only enabled after an initial period of time has passed so the firm does not liquidate its warehouse capacity at startup when business volume and hence inventories are low.

 

time_to_change_product_selection[company]=IF_THEN_ELSE(company_in_operation_switch[company] = 1, STANDARD_TIME_TO_CHANGE_PRODUCT_SELECTION, 1e + 012)

Units: Year

The time required to achieve the desired level of product selection. Infinite if the company is not in operation.

Uses:

product_selection - The number of products offered by the online retailer. Reference: Amazon reached 2.5 M books on March 17, 1997 (HBS case) and 4.5 M titles in late 1999 (Gomez advisors).

 

total_editorial_cost[company] = (cost_of_infrastructure_for_user_generated_content[company] + editorial_content_production[company] * COST_PER_PAGE_CREATED_INHOUSE) * company_in_operation_switch[company]

Units: $/Year

Total editorial costs are the sum of costs for self-generated and user-generated content.

Uses:

operating_expenses - Operating expenses are the sum of all expenses except taxes and depreciation.

product_development - Product development costs include the cost of content development and the fraction of server infrastructure and engineering workforce costs devoted to new product and new technology development.

 

total_marketing_spending[company] = MAX(MINIMUM_MARKETING_SPENDING[company], recent_sales_revenue[company] * fraction_of_revenue_to_marketing[company]) * company_in_operation_switch[company]

Units: $/Year

Total marketing expenditures are determined by a fraction of sales, but are not less than a minimum rate. Marketing begins only after the firm enters the market.

Uses:

Brand_Equity - Brand equity is measured in dollars. It increases through advertising spending and through cross-talk (free riding) on the advertising of the brick and mortar competitors. It depreciates at a constant fractional rate.

acquisition_costs_per_customer - The cost of each new loyal customer acquired is the ratio of total marketing spending to the rate at which the firm acquires new loyal customers.

marketing_and_sales - Marketing and sales expense consists of marketing spending plus the costs of customer support and inventory.

operating_expenses - Operating expenses are the sum of all expenses except taxes and depreciation.

 

total_number_of_loyal_shoppers[company] = Loyal_Occasional_Buyer[company] + Loyal_High_Volume_Buyer[company]

Units: People

The total number of loyal customers of the company, independent of their volume of purchases.

Uses:

user_generated_content - New user-generated content is created based on the number of users and the contribution per user. Content contributed from independent shoppers is not considered, as a simplifying assumption.

 

total_pageviews[company] = Loyal_Occasional_Buyer[company] * PAGEVIEWS_PER_OCCASIONAL_SHOPPER + Loyal_High_Volume_Buyer[company] * PAGEVIEWS_PER_HIGH_VOLUME_SHOPPER + independent_shopper_pageviews[company] + potential_shopper_pageviews[company]

Units: Pageviews/Year

The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

Uses:

cost_per_pageview - The average cost per pageview is the ratio of the sum of engineering and server infrastructure costs to total pageviews.

indicated_server_infrastructure - The indicated level of server infrastructure depends on the volume of pageviews the firm must process, but is subject to economies of scale. If the economy of scale exponent is 1 there are no scale economies; the smaller the exponent, the greater the scale economies.

 

total_transactions[company] = ANNUAL_TRANSACTIONS_PER_OCCASIONAL_BUYER * Loyal_Occasional_Buyer[company] + ANNUAL_TRANSACTIONS_PER_HIGH_VOLUME_BUYER * Loyal_High_Volume_Buyer[company] + independent_shopper_transactions[company]

Units: transactions/Year

The total transactions of each company is the sum of the transactions generated by each user group.

Uses:

customer_contacts - The total number of contacts with customers to which the firm must respond.

indicated_customer_support_staff - The customer support staff needed is based on the FTEs needed per customer contact, the number of customer contacts generated per transaction, and the number of transactions, adjusted for a scale economy effect.

orders - Orders is the product of the number of transactions and average order size.

recent_transactions - Recent transactions averages transactions volume over a short period to filter out noise. Initialized in steady state at the initial expected growth rate. See Sterman (2000) Chapter 16.

 

unit_cost_of_goods_sold[company] = ZIDZ(Value_Of_Inventory[company], Inventory[company])

Units: $/Item

The average value of the items in the firm's inventory. Returns 0 if inventory is zero.

Uses:

cost_of_goods_sold - The cost of goods sold is determined by shipments and the average value o f items shipped.

 

unit_value_of_real_estate[company] = ZIDZ(Real_Estate_Infrastructure[company], Warehouse_Space[company])

Units: $/square_foot

The average book value of the firm's real estate is the ratio of total book value to real estate. Zero prior to operations.

Uses:

reduction_in_real_estate_value_from_disinvestment - When the firm reduces its real estate holdings (warehouse space), the book value of its real estate holdings is reduced proportionately.

 

user_generated_content[company] = total_number_of_loyal_shoppers[company] * page_generation_per_user[company] * company_in_operation_switch[company]

Units: webpages/Year

New user-generated content is created based on the number of users and the contribution per user. Content contributed from independent shoppers is not considered, as a simplifying assumption.

Uses:

Content - Content of the webpages can be self-generated or user-generated. Pages also become obsolete and are deleted. The very small initial condition prevents overflow prior to entry by the company.

cost_per_user_generated_webpage - The cost per user-generated page is the total cost of the infrastructure permitting user-generated content divided by the rate at which users contribute content. The ZIDZ function returns zero if there is no user-generated content.

 

USER_GENERATED_INFRASTRUCTURE_COST[company] = 1e + 006

Units: $/Year

The annual cost of allowing user-generated content to be generated and posted to the firm's site.

Uses:

cost_of_infrastructure_for_user_generated_content - It is assumed that the facilitation of user-generated content costs a fixed amount annually, no matter how many users use this service.

 

value_of_initial_inventory[company] = average_acquisition_cost[company] * Inventory[company]

Units: $

The value of the firm's initial inventory.

Uses:

Value_Of_Inventory - The value of inventory is augmented by the value of goods acquired and decreased by the value of goods shipped (Cost of Goods Sold).

 

Value_Of_Inventory[company] = INTEG(increase_in_value_of_inventory[company] - cost_of_goods_sold[company], value_of_initial_inventory[company])

Units: $

The value of inventory is augmented by the value of goods acquired and decreased by the value of goods shipped (Cost of Goods Sold).

Uses:

total_assets - This accounting formula measures Total assets.

unit_cost_of_goods_sold - The average value of the items in the firm's inventory. Returns 0 if inventory is zero.

 

warehouse_maintenance_costs[company] = MAINTENANCE_COSTS_PER_SQUARE_FOOT * Warehouse_Space[company]

Units: $/Year

Warehouse maintenance costs are assessed based on the size of warehouses used.

Uses:

inventory_costs - Inventory costs depend on the number of SKUs and warehouse maintenance costs. Costs are incurred only after the firm begins operations.

 

Warehouse_Space[company] = INTEG(change_in_warehouse_space[company] + warehouse_space_added_at_start_of_operations[company], 0)

Units: Square_feet

This stock tracks the warehouse space build by the company.

Uses:

change_in_warehouse_space - Warehouse space adjusts to the desired level with a time delay given by the Time to Adjust Warehouse Space. Only enabled after an initial period of time has passed so the firm does not liquidate its warehouse capacity at startup when business volume and hence inventories are low.

desired_inventory - Desired inventory is determined by the warehouse space available to store it. Although at certain periods it might be higher that the indicated inventory, this is not explicitly modeled since the warehouse space is allowed to decrease fairly rapidly.

unit_value_of_real_estate - The average book value of the firm's real estate is the ratio of total book value to real estate. Zero prior to operations.

warehouse_maintenance_costs - Warehouse maintenance costs are assessed based on the size of warehouses used.

 

warehouse_space_added_at_start_of_operations[company] = PULSE(STARTUP_DATE[company], TIME_STEP) * INITIAL_WAREHOUSE_SPACE[company]/TIME_STEP

Units: Square_feet/Year

The Initial Warehouse Space for each firm is added when the firm commences operations.

Uses:

Warehouse_Space - This stock tracks the warehouse space build by the company.

initial_investment_in_real_estate - The value of the initial investment in warehouse capacity and real estate.

 

year_to_enable_warehouse_liquidation[company] = IPO_DATE[company] + TIME_TO_ACHIEVE_EXPECTED_VOLUME

Units: Year

Prior to this time the firm will not liquidate any excess warehouse space (they wait for volume to rise to justify filling the warehouse).  The time to achieve expected volume represents the time horizon over which the firm is willing to accept excess warehouse capacity without rationalizing it. 

Uses:

switch_to_enable_warehouse_liquidation - Prior to a specified year the firm will not liquidate its warehouse capacity if there is excess space (prevents liquidation at startup when sales are low).

 

********************************

   .Starting_conditions

********************************

 

BRICK_AND_MORTAR_ADVERTISING[COMPANY1] = 0

BRICK_AND_MORTAR_ADVERTISING[COMPANY2] = 0

BRICK_AND_MORTAR_ADVERTISING[COMPANY3] = 1.5e + 007

Units: $/Year

The advertising volume of a Brick-and-Mortar partner to which a URL can be added without extra cost.

Uses:

free_riding_on_brick_and_mortar_advertising - Some online retailers have brick-and-mortar parent companies who can promote their on line operations through existing advertising campaigns that impost no cost on the online division. Only some of the brick and mortar advertising, however, contributes to the brand equity of the online division.

 

company_in_operation_switch[company]=IF_THEN_ELSE(Time> = STARTUP_DATE[company], 1, 0)

Units: dimensionless

This switch is used to decide whether a given company has already begun its operations. Prior to the start of operations the key flows for the company are zero.

Uses:

adequacy_of_customer_support_staff - The adequacy of staffing is the ratio of the staff available for work, adjusted by the relative workweek to reflect overtime, to the staff required for operations. Set to neutral prior to operations and zero if no staff are required.

adequacy_of_server_infrastructure - The adequacy of server infrastructure is the ratio of the infrastructure available to the infrastructure required. Set to zero if either the infrastructure required is zero or the firm has not yet begun operations.

adequacy_of_technical_staff - The adequacy of technical staff is the ratio of the staff available, including the effect of overtime, to the staff required. Adequacy is neutral prior to operations and zero if required staff is zero.

assimilation_rate - Rookies that gain sufficient experience become Experienced Employees.

change_in_average_workweek - The average workweek is an exponential moving average of the work week. Active only after the firm begins operations.

customer_support_salary_cost - This calculates all costs for salaries for Customer Support personnel.

desired_hire_rate - Desired hiring is the sum of replacement hiring (to replace quits) and a fraction of the gap between the authorized and actual headcount. Labor flows are active only after the firm begins operations. Note that we assume quits are replaced immediately. this is an a fortiori assumption in that modeling the delay in recognizing quits and filling vacancies would limit staff further during rapid growth, working against the GBF strategy.

desired_layoff_rate - The desired layoff rate is the magnitude of the desired layoff rate whenever that rate is less than zero. The Willingness to Lay Off indicates how responsive the firm is to layoff excess workers (0 equals no layoffs; 1 is just as willing to lay off as to hire).

editorial_content_production - This Inflow expresses the creation of self-generated content through editorial staff. Its limited either by the Editorial content, or the amount of content required to support the product selection.

effect_of_brand_equity_on_attractiveness - The better a firm's site performance, the more attractive it is.

effect_of_content_on_attractiveness - The better a firm's content, the greater its attractiveness.

effect_of_fulfillment_on_attractiveness - The better a firm's site performance, the more attractive it is.

effect_of_price_on_attractiveness - The attractiveness of online shopping from price. Depends on the effective price of online shopping, including the convenience effect, relative to the brick and mortar price.

effect_of_selection_on_attractiveness - The better a firm's product selection, the more attractive it is.

effect_of_service_on_attractiveness - The better a firm's customer service, the more attractive it is.

effect_of_site_performance_on_attractiveness - The better a firm's site performance, the more attractive it is.

engineering_salary_costs - This variable calculates the total salary expense for engineering employees.

experienced_buyer_recapture_fraction - The rate at which companies gain loyal users from the pool of independent users depends on the attractiveness of the firm. Always less than the maximum switch fraction.

experienced_quit_fraction - The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the company begins operations.

free_riding_on_brick_and_mortar_advertising - Some online retailers have brick-and-mortar parent companies who can promote their on line operations through existing advertising campaigns that impost no cost on the online division. Only some of the brick and mortar advertising, however, contributes to the brand equity of the online division.

general_and_administrative_expense - Administrative and overhead expenses consist of a fixed and variable component.

increase_in_browsers - The flow of people who start visiting online retailers websites but haven't yet made any purchases. Active only after at least one online retailer enters the segment.

inventory_costs - Inventory costs depend on the number of SKUs and warehouse maintenance costs. Costs are incurred only after the firm begins operations.

market_capitalization - The market value of the firm is the greater of the expected present value of future profits or the breakup value of the firm. Expected profits are discounted prior to the IPO.

number_of_firms_in_market - The number of firms in the market.

options_vesting - Options vest over an average vesting period. Options vest only if the company is in operation.

price - Prices are based on the cost of goods sold and the target gross margin.

required_server_infrastructure - The server infrastructure required depends on an indicated level, which depends on the volume of pageviews the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

rookie_quit_fraction - The fraction of experienced employees quitting is a normal fractional rate adjusted by the effect of job attractiveness. Labor flows are not active until the firm begins operations.

staff_required_for_customer_support - Customer service staff required depends on an indicated level, which depends on the volume of transactions the firm must handle, but must be greater than some minimum scale. Set to zero prior to operations.

time_to_change_product_selection - The time required to achieve the desired level of product selection. Infinite if the company is not in operation.

total_editorial_cost - Total editorial costs are the sum of costs for self-generated and user-generated content.

total_marketing_spending - Total marketing expenditures are determined by a fraction of sales, but are not less than a minimum rate. Marketing begins only after the firm enters the market.

user_generated_content - New user-generated content is created based on the number of users and the contribution per user. Content contributed from independent shoppers is not considered, as a simplifying assumption.

 

DESIRED_ORDER_FULFILLMENT_TIME[COMPANY1] = 2

DESIRED_ORDER_FULFILLMENT_TIME[COMPANY2] = 4

DESIRED_ORDER_FULFILLMENT_TIME[COMPANY3] = 2

Units: days

Uses:

desired_inventory_for_warehouse_space - Desired Inventory for warehouse space. Indicated inventory is adjusted by the ratio of normal to desired order fulfillment time. Shorter desired order fulfillment times increase the required warehouse space.

 

DESIRED_PRODUCT_SELECTION[COMPANY1] = 7e + 006

DESIRED_PRODUCT_SELECTION[COMPANY2] = 2e + 006

DESIRED_PRODUCT_SELECTION[COMPANY3] = 5e + 006

Units: Skus

In the book market, there are at least 5.000.000 products. For pet supplies, there are about 40.000.

Uses:

product_selection - The number of products offered by the online retailer. Reference: Amazon reached 2.5 M books on March 17, 1997 (HBS case) and 4.5 M titles in late 1999 (Gomez advisors).

 

INITIAL_BRAND_EQUITY[COMPANY1] = 50000

INITIAL_BRAND_EQUITY[COMPANY2] = 50000

INITIAL_BRAND_EQUITY[COMPANY3] = 2.5e + 006

Units: $

The amount of brand equity available for the company at its simulated start date. Should be small for startups and potentially larger for web businesses using a bricks-and-mortar brand.

Uses:

brand_equity_at_beginning_of_operations - New entrants can begin operations with a certain initial quantity of brand equity. This flow ensures that the initial brand equity (for example the brand equity derived from an existing bricks-and-mortar operation) is only taken into account after the company begins its online operations.

 

INITIAL_CASH[COMPANY1] = 1e + 007

INITIAL_CASH[COMPANY2] = 1e + 007

INITIAL_CASH[COMPANY3] = 1e + 008

Units: $

The amount of cash available for the company at its simulated start date.

Uses:

initial_funding - The initial funding represents the amount of cash made available to the company at its start date.

 

INITIAL_EXPERIENCED_EMPLOYEES[COMPANY1,ENGIN] = 5

INITIAL_EXPERIENCED_EMPLOYEES[COMPANY2,ENGIN] = 5

INITIAL_EXPERIENCED_EMPLOYEES[COMPANY3,ENGIN] = 5

INITIAL_EXPERIENCED_EMPLOYEES[COMPANY1,CUSTSUPPORT] = 5

INITIAL_EXPERIENCED_EMPLOYEES[COMPANY2,CUSTSUPPORT] = 5

INITIAL_EXPERIENCED_EMPLOYEES[COMPANY3,CUSTSUPPORT] = 5

Units: People

The initial staffing available for the company at its simulated start date.

Uses:

Experienced_Employees - The number of experienced employees. Increased by assimilation of inexperienced employees into the experienced ranks and decreased by attrition and layoffs.

 

INITIAL_FRACTION_OF_REVENUE_TO_MARKETING[COMPANY1] = 0.175

INITIAL_FRACTION_OF_REVENUE_TO_MARKETING[COMPANY2] = 0.15

INITIAL_FRACTION_OF_REVENUE_TO_MARKETING[COMPANY3] = 0.175

Units: dimensionless

The indicated fraction of revenue allocated to marketing is a function of time for each firm.

Uses:

base_fraction_of_revenue_to_marketing - Fraction of revenue to marketing before adjustment for liquidity, i.e., it reflects the desired fraction of revenue to marketing given the current market maturity. As the market matures, the fraction of revenue to marketing shifts from Initial to the Mature level.

 

INITIAL_NUMBER_OF_SHARES_OUTSTANDING[company] = 1e + 007

Units: shares

The number of shares outstanding when the company starts business.

Uses:

Shares_Outstanding - The number of shares outstanding increases when new shares are issued for fundraising purposes, or when employees exercise options.

 

INITIAL_PRODUCT_SELECTION[COMPANY1] = 1e + 006

INITIAL_PRODUCT_SELECTION[COMPANY2] = 1e + 006

INITIAL_PRODUCT_SELECTION[COMPANY3] = 3e + 006

Units: Skus

The initial product selection (measured in stock-keeping Units, SKUs) available for the company at its simulated start date. Large B&M Bookstores carry up to 3 million SKUs. Brick-and-Mortar Pet Superstore carry about 10.000 SKUs.

Uses:

product_selection - The number of products offered by the online retailer. Reference: Amazon reached 2.5 M books on March 17, 1997 (HBS case) and 4.5 M titles in late 1999 (Gomez advisors).

 

INITIAL_SERVER_INFRASTRUCTURE[company] = 50000

Units: $

The value of the initial server infrastructure (measured in dollars) available for the company at its simulated start date.

Uses:

initial_investment_in_server_infrastructure - At startup the firm acquires a certain initial server infrastructure.

 

INITIAL_WAREHOUSE_SPACE[COMPANY1] = 50000

INITIAL_WAREHOUSE_SPACE[COMPANY2] = 10000

INITIAL_WAREHOUSE_SPACE[COMPANY3] = 150000

Units: Square_feet

Initial Warehouse Space available for the company at its simulated start date. Pets.com opened a 140.000 SQFT facility in September 1999 and announced a 300.000 SQFT facility at costs of $ 7-9 M for Q1 2000.

Uses:

warehouse_space_added_at_start_of_operations - The Initial Warehouse Space for each firm is added when the firm commences operations.

 

IPO_DATE[COMPANY1] = 1997.5

IPO_DATE[COMPANY2] = 1997.5

IPO_DATE[COMPANY3] = 1999

Units: Year

The date at which the company goes public by selling a substantial amount of its equity for cash.

Uses:

ipo_shares - The shares issued at the IPO date. The entire value of the IPO is issues in one time step.

pre_ipo_discount - The stock valuation is discounted prior to an IPO as the stock is less liquid as an investment.

year_to_enable_warehouse_liquidation - Prior to this time the firm will not liquidate any excess warehouse space (they wait for volume to rise to justify filling the warehouse). The time to achieve expected volume represents the time horizon over which the firm is willing to accept excess warehouse capacity without rationalizing it.

 

MINIMUM_EDITORIAL_BUDGET[COMPANY1] = 1e + 006

MINIMUM_EDITORIAL_BUDGET[COMPANY2] = 1e + 006

MINIMUM_EDITORIAL_BUDGET[COMPANY3] = 2e + 006

Units: $/Year

The minimum expenditure on content the firm believes is necessary.

Uses:

editorial_budget - The budget for content development is the greater of a minimum rate or a fraction of recent revenue.

 

MINIMUM_MARKETING_SPENDING[COMPANY1] = 1e + 006

MINIMUM_MARKETING_SPENDING[COMPANY2] = 1e + 006

MINIMUM_MARKETING_SPENDING[COMPANY3] = 1e + 006

Units: $/Year

The manager can set a minimum spending for marketing as a floor independent of current revenue.

Uses:

total_marketing_spending - Total marketing expenditures are determined by a fraction of sales, but are not less than a minimum rate. Marketing begins only after the firm enters the market.

 

number_of_firms_in_market = SUM(company_in_operation_switch[company!])

Units: dimensionless

The number of firms in the market.

Uses:

reference_market_share_for_valuation - The reference market share used for the leadership premium in valuation.

 

STARTUP_DATE[COMPANY1] = 1995.5

STARTUP_DATE[COMPANY2] = 1995.5

STARTUP_DATE[COMPANY3] = 1997.5

Units: Year

The date at which companies enter the market and begin operations.

Uses:

brand_equity_at_beginning_of_operations - New entrants can begin operations with a certain initial quantity of brand equity. This flow ensures that the initial brand equity (for example the brand equity derived from an existing bricks-and-mortar operation) is only taken into account after the company begins its online operations.

company_in_operation_switch - This switch is used to decide whether a given company has already begun its operations. Prior to the start of operations the key flows for the company are zero.

initial_funding - The initial funding represents the amount of cash made available to the company at its start date.

initial_investment_in_server_infrastructure - At startup the firm acquires a certain initial server infrastructure.

inventory_acquisition - Inventory acquisition is the indicated rate, constrained to be nonnegative. Zero prior to start of operations.

warehouse_space_added_at_start_of_operations - The Initial Warehouse Space for each firm is added when the firm commences operations.

weight_on_actual_net_income_after_startup_honeymoon_period - After the honeymoon period for startups ends, the financial markets will use actual net income in their assessment of the firms value. The actual weight adjusts gradually to this level.

 

********************************

   .User_flows

********************************

 

awareness_from_word_of_mouth = Browsers * CONTACT_RATE * probability_of_browsing_online_shopping * total_online_shoppers/Population

Units: People/Year

The number of people trying online shopping as a result of word of mouth. Depends on the contact rate, probability of adoption (adjusted by the relative attractiveness of online shopping) and the probability of having a word of mouth encounter with a current on line shopper.

Uses:

increase_in_actual_online_shoppers - The rate at which people start buying online. The greater the attractiveness of each online firm, the faster potential shoppers try the service.

 

Browsers = INTEG(increase_in_browsers + entry_of_former_category_shoppers - SUM(increase_in_actual_online_shoppers[company!]) , 0)

Units: People

These are people who are interested in online shopping and who are already checking out various online retailers. They have not yet made a purchase and have not developed loyalty to any particular company. This stock also accumulates former online shoppers that left the sector unsatisfied, but are now monitoring sites for potential re-entry into the sector.

Uses:

awareness_from_word_of_mouth - The number of people trying online shopping as a result of word of mouth. Depends on the contact rate, probability of adoption (adjusted by the relative attractiveness of online shopping) and the probability of having a word of mouth encounter with a current on line shopper.

increase_in_actual_online_shoppers - The rate at which people start buying online. The greater the attractiveness of each online firm, the faster potential shoppers try the service.

potential_shopper_pageviews - Each potential online shopper generates a certain number of pageviews, allocated to each company in proportion to their attractiveness share. Note that we are assuming that potential shoppers have access to the relative attractiveness of each firm through brand equity advertising and word of mouth effects.

 

capture_of_high_volume_buyers[company] = (Independent_High_Volume_Buyer * experienced_buyer_recapture_fraction[company])

Units: People/Year

Independent High-Volume buyers can become loyal buyers again based on the experienced buyer recapture fraction, which differs for the different companies.

Uses:

Independent_High_Volume_Buyer - This group represents people who buy high volumes but are not affiliated with any particular online retailer.

Loyal_High_Volume_Buyer - This group of people represents high-volume purchasers who are loyal to one online retailer.

new_loyal_users - The rate at which the firm acquires new loyal users.

 

capture_of_occasional_buyers[company] = (Independent_Occasional_Buyer * experienced_buyer_recapture_fraction[company])

Units: People/Year

Independent Occasional buyers can become loyal buyers again based on the Experienced Buyer Recapture Fraction, which differs for each company.

Uses:

Independent_Occasional_Buyer - This group represents purchasers of moderate volumes who are not affiliated with any particular online retailer.

Loyal_Occasional_Buyer - These people shop online on a regular basis, though the volumes they buy are small. They are loyal in the sense that they buy always at the same site and they stay loyal unless they get disappointed.

new_loyal_users - The rate at which the firm acquires new loyal users.

 

entry_of_former_category_shoppers = Former_Category_Shoppers * reentry_fraction

Units: People/Year

People who abandoned online shopping in the category may reenter the market at a fractional rate that depends on the relative attractiveness of online shopping compared to brick and mortar alternatives.

Uses:

Browsers - These are people who are interested in online shopping and who are already checking out various online retailers. They have not yet made a purchase and have not developed loyalty to any particular company. This stock also accumulates former online shoppers that left the sector unsatisfied, but are now monitoring sites for potential re-entry into the sector.

Former_Category_Shoppers - Category shoppers that have abandoned the online market.

 

Former_Category_Shoppers = INTEG(high_volume_buyer_abandonment_rate + occasional_buyer_abandonment_rate - entry_of_former_category_shoppers, 0)

Units: People

Category shoppers that have abandoned the online market.

Uses:

entry_of_former_category_shoppers - People who abandoned online shopping in the category may reenter the market at a fractional rate that depends on the relative attractiveness of online shopping compared to brick and mortar alternatives.

 

FRACTION_MOVING_FROM_HIGH_TO_OCCASIONAL_VOLUME = 0.001

Units: 1/Year

The fraction of the high-volume buyers who move back to occasional buyer status each year.

Uses:

independent_shoppers_moving_from_high_to_occasional_volume - A fraction of independent high volume shoppers become occasional shoppers each year.

loyal_shoppers_moving_from_high_to_occasional_volume - The rate at which high volume shoppers become occasional buyers. A certain fraction of the high-volume buyers reduce their online purchases and become occasional buyers each year.

 

fraction_moving_from_occasional_to_high_volume = NORMAL_FRACTION_MOVING_FROM_OCCASIONAL_TO_HIGH_VOLUME * MAX(0, (potential_size_of_high_volume_segment - total_high_volume_buyers) /potential_size_of_high_volume_segment)

Units: 1/Year

A fraction of the occasional buyers become high-volume buyers each year as they grow more comfortable using the online service. This fraction falls as the total number of high-volume customers approaches a maximum. Note that the size of the high volume segment does not depend on the attractiveness of online shopping vs. brick and mortar.  This reflects the assumption that total purchases in a category are not affected by the availability of online shopping.

Uses:

independent_shoppers_moving_from_occasional_to_high_volume - A fraction of independent occasional buyers increase their purchasing activity and become high-volume buyers each year.

loyal_shoppers_moving_from_occasional_to_high_volume - This flow measures the amount of people becoming high-volume purchasers. A fraction of the occasional buyers escalate to high-volume buyers each year, but the flow diminishes as the total number of high-volume buyers approaches its maximum (not all people become high-volume buyers).

 

FRACTION_OF_INTERNET_USERS_IN_PRODUCT_CATEGORY = 0.3

Units: dimensionless

The fraction of the internet users that are interested in the product category.

Uses:

Non_Shopping_Internet_Users - The stock of internet users who might ultimately shop online in the category considered, but who have not yet become aware of or entered the online market.

increase_in_potential_online_shoppers - Only a fraction of those gaining access to the internet will become online shoppers in the category considered.

potential_size_of_high_volume_segment - The fraction of internet users who might become high-volume purchasers in the category considered is a fraction of the population that might shop online in the category, which in turn is a fraction of the total online population (not all internet users will shop online or become high volume purchasers).

 

high_volume_buyer_abandonment_rate = Independent_High_Volume_Buyer * online_shopping_abandonment_fraction

Units: People/Year

The rate at which high-volume buyers abandon online shopping in favor of returning to brick-and-mortar shopping.

Uses:

Former_Category_Shoppers - Category shoppers that have abandoned the online market.

Independent_High_Volume_Buyer - This group represents people who buy high volumes but are not affiliated with any particular online retailer.

 

increase_in_actual_online_shoppers[company] = ((Browsers/TIME_TO_BECOME_COMFORTABLE_BUYING_ONLINE) + awareness_from_word_of_mouth) * attractiveness_share[company]

Units: People/Year

The rate at which people start buying online. The greater the attractiveness of each online firm, the faster potential shoppers try the service.

Uses:

Browsers - These are people who are interested in online shopping and who are already checking out various online retailers. They have not yet made a purchase and have not developed loyalty to any particular company. This stock also accumulates former online shoppers that left the sector unsatisfied, but are now monitoring sites for potential re-entry into the sector.

Loyal_Occasional_Buyer - These people shop online on a regular basis, though the volumes they buy are small. They are loyal in the sense that they buy always at the same site and they stay loyal unless they get disappointed.

new_loyal_users - The rate at which the firm acquires new loyal users.

 

increase_in_browsers = IF_THEN_ELSE(SUM(company_in_operation_switch[company!]) >0, Non_Shopping_Internet_Users/TIME_TO_BECOME_AWARE_OF_ONLINE_SHOPPING, 0)

Units: People/Year

The flow of people who start visiting online retailers websites but haven't yet made any purchases. Active only after at least one online retailer enters the segment.

Uses:

Browsers - These are people who are interested in online shopping and who are already checking out various online retailers. They have not yet made a purchase and have not developed loyalty to any particular company. This stock also accumulates former online shoppers that left the sector unsatisfied, but are now monitoring sites for potential re-entry into the sector.

Non_Shopping_Internet_Users - The stock of internet users who might ultimately shop online in the category considered, but who have not yet become aware of or entered the online market.

 

increase_in_potential_online_shoppers = increase_in_internet_users * FRACTION_OF_INTERNET_USERS_IN_PRODUCT_CATEGORY

Units: People/Year

Only a fraction of those gaining access to the internet will become online shoppers in the category considered.

Uses:

Non_Shopping_Internet_Users - The stock of internet users who might ultimately shop online in the category considered, but who have not yet become aware of or entered the online market.

 

Independent_High_Volume_Buyer = INTEG( - SUM(capture_of_high_volume_buyers[company!]) + SUM(loss_of_high_volume_buyers[company!]) + independent_shoppers_moving_from_occasional_to_high_volume - independent_shoppers_moving_from_high_to_occasional_volume - high_volume_buyer_abandonment_rate, 0)

Units: People

This group represents people who buy high volumes but are not affiliated with any particular online retailer.

Uses:

capture_of_high_volume_buyers - Independent High-Volume buyers can become loyal buyers again based on the experienced buyer recapture fraction, which differs for the different companies.

high_volume_buyer_abandonment_rate - The rate at which high-volume buyers abandon online shopping in favor of returning to brick-and-mortar shopping.

independent_shopper_pageviews - Each company captures a fraction of the total number of pageviews generated by independent shoppers.

independent_shopper_transactions - Each company captures a fraction of the total number of transactions generated by independent shoppers.

independent_shoppers_moving_from_high_to_occasional_volume - A fraction of independent high volume shoppers become occasional shoppers each year.

total_high_volume_buyers - The total number of high-volume buyers, including independents.

total_online_shoppers - The total of all online shoppers, over all firms and types of shoppers.

 

Independent_Occasional_Buyer = INTEG(SUM(loss_of_occasional_buyers[company!]) - SUM(capture_of_occasional_buyers[company!]) + independent_shoppers_moving_from_high_to_occasional_volume - independent_shoppers_moving_from_occasional_to_high_volume - occasional_buyer_abandonment_rate, 0)

Units: People

This group represents purchasers of moderate volumes who are not affiliated with any particular online retailer.

Uses:

capture_of_occasional_buyers - Independent Occasional buyers can become loyal buyers again based on the Experienced Buyer Recapture Fraction, which differs for each company.

independent_shopper_pageviews - Each company captures a fraction of the total number of pageviews generated by independent shoppers.

independent_shopper_transactions - Each company captures a fraction of the total number of transactions generated by independent shoppers.

independent_shoppers_moving_from_occasional_to_high_volume - A fraction of independent occasional buyers increase their purchasing activity and become high-volume buyers each year.

occasional_buyer_abandonment_rate - The rate at which occasional buyers stop shopping online and return to brick-and-mortar shopping.

total_online_shoppers - The total of all online shoppers, over all firms and types of shoppers.

 

independent_shoppers_moving_from_high_to_occasional_volume = FRACTION_MOVING_FROM_HIGH_TO_OCCASIONAL_VOLUME * Independent_High_Volume_Buyer

Units: People/Year

A fraction of independent high volume shoppers become occasional shoppers each year.

Uses:

Independent_High_Volume_Buyer - This group represents people who buy high volumes but are not affiliated with any particular online retailer.

Independent_Occasional_Buyer - This group represents purchasers of moderate volumes who are not affiliated with any particular online retailer.

 

independent_shoppers_moving_from_occasional_to_high_volume = fraction_moving_from_occasional_to_high_volume * Independent_Occasional_Buyer

Units: People/Year

A fraction of independent occasional buyers increase their purchasing activity and become high-volume buyers each year.

Uses:

Independent_High_Volume_Buyer - This group represents people who buy high volumes but are not affiliated with any particular online retailer.

Independent_Occasional_Buyer - This group represents purchasers of moderate volumes who are not affiliated with any particular online retailer.

 

loss_of_high_volume_buyers[company] = Loyal_High_Volume_Buyer[company] * turnover_fraction[company]

Units: People/Year

The loss of loyal high-volume shoppers, who become independent shoppers.

Uses:

Independent_High_Volume_Buyer - This group represents people who buy high volumes but are not affiliated with any particular online retailer.

Loyal_High_Volume_Buyer - This group of people represents high-volume purchasers who are loyal to one online retailer.

 

loss_of_occasional_buyers[company] = Loyal_Occasional_Buyer[company] * turnover_fraction[company]

Units: People/Year

This flow measures the loss of loyal shoppers (they become independent shoppers).

Uses:

Independent_Occasional_Buyer - This group represents purchasers of moderate volumes who are not affiliated with any particular online retailer.

Loyal_Occasional_Buyer - These people shop online on a regular basis, though the volumes they buy are small. They are loyal in the sense that they buy always at the same site and they stay loyal unless they get disappointed.

 

Loyal_High_Volume_Buyer[company] = INTEG(loyal_shoppers_moving_from_occasional_to_high_volume[company] + capture_of_high_volume_buyers[company] - loss_of_high_volume_buyers[company] - loyal_shoppers_moving_from_high_to_occasional_volume[company], 0)

Units: People

This group of people represents high-volume purchasers who are loyal to one online retailer.

Uses:

loss_of_high_volume_buyers - The loss of loyal high-volume shoppers, who become independent shoppers.

loyal_shoppers_moving_from_high_to_occasional_volume - The rate at which high volume shoppers become occasional buyers. A certain fraction of the high-volume buyers reduce their online purchases and become occasional buyers each year.

total_high_volume_buyers - The total number of high-volume buyers, including independents.

total_number_of_loyal_shoppers - The total number of loyal customers of the company, independent of their volume of purchases.

total_online_shoppers - The total of all online shoppers, over all firms and types of shoppers.

total_pageviews - The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

total_transactions - The total transactions of each company is the sum of the transactions generated by each user group.

 

Loyal_Occasional_Buyer[company] = INTEG(increase_in_actual_online_shoppers[company] + loyal_shoppers_moving_from_high_to_occasional_volume[company] - loss_of_occasional_buyers[company] - loyal_shoppers_moving_from_occasional_to_high_volume[company] + capture_of_occasional_buyers[company], 0)

Units: People

These people shop online on a regular basis, though the volumes they buy are small. They are loyal in the sense that they buy always at the same site and they stay loyal unless they get disappointed.

Uses:

loss_of_occasional_buyers - This flow measures the loss of loyal shoppers (they become independent shoppers).

loyal_shoppers_moving_from_occasional_to_high_volume - This flow measures the amount of people becoming high-volume purchasers. A fraction of the occasional buyers escalate to high-volume buyers each year, but the flow diminishes as the total number of high-volume buyers approaches its maximum (not all people become high-volume buyers).

total_number_of_loyal_shoppers - The total number of loyal customers of the company, independent of their volume of purchases.

total_online_shoppers - The total of all online shoppers, over all firms and types of shoppers.

total_pageviews - The total number of pageviews generated by each company per year based on the different user groups and their usage patterns.

total_transactions - The total transactions of each company is the sum of the transactions generated by each user group.

 

loyal_shoppers_moving_from_high_to_occasional_volume[company] = Loyal_High_Volume_Buyer[company] * FRACTION_MOVING_FROM_HIGH_TO_OCCASIONAL_VOLUME

Units: People/Year

The rate at which high volume shoppers become occasional buyers. A certain fraction of the high-volume buyers reduce their online purchases and become occasional buyers each year.

Uses:

Loyal_High_Volume_Buyer - This group of people represents high-volume purchasers who are loyal to one online retailer.

Loyal_Occasional_Buyer - These people shop online on a regular basis, though the volumes they buy are small. They are loyal in the sense that they buy always at the same site and they stay loyal unless they get disappointed.

 

loyal_shoppers_moving_from_occasional_to_high_volume[company] = Loyal_Occasional_Buyer[company] * fraction_moving_from_occasional_to_high_volume

Units: People/Year

This flow measures the amount of people becoming high-volume purchasers. A fraction of the occasional buyers escalate to high-volume buyers each year, but the flow diminishes as the total number of high-volume buyers approaches its maximum (not all people become high-volume buyers).

Uses:

Loyal_High_Volume_Buyer - This group of people represents high-volume purchasers who are loyal to one online retailer.

Loyal_Occasional_Buyer - These people shop online on a regular basis, though the volumes they buy are small. They are loyal in the sense that they buy always at the same site and they stay loyal unless they get disappointed.

 

Non_Shopping_Internet_Users = INTEG(increase_in_potential_online_shoppers - increase_in_browsers, Total_Internet_Users * FRACTION_OF_INTERNET_USERS_IN_PRODUCT_CATEGORY)

Units: People

The stock of internet users who might ultimately shop online in the category considered, but who have not yet become aware of or entered the online market.

Uses:

increase_in_browsers - The flow of people who start visiting online retailers websites but haven't yet made any purchases. Active only after at least one online retailer enters the segment.

 

NORMAL_FRACTION_MOVING_FROM_OCCASIONAL_TO_HIGH_VOLUME = 0.28

Units: 1/Year

The normal rate at which low volume customers become high volume customers.

Uses:

fraction_moving_from_occasional_to_high_volume - A fraction of the occasional buyers become high-volume buyers each year as they grow more comfortable using the online service. This fraction falls as the total number of high-volume customers approaches a maximum. Note that the size of the high volume segment does not depend on the attractiveness of online shopping vs. brick and mortar. This reflects the assumption that total purchases in a category are not affected by the availability of online shopping.

 

NORMAL_REENTRY_FRACTION = 2

Units: dimensionless/Year

Normal fraction of former category shoppers that reenters the internet category market per year.  This is equivalent to the reciprocal of the average waiting time that a former shopper waits before monitoring the market again. 

Uses:

reentry_fraction - The fractional reentry rate of former online shoppers is a normal fraction modified by the relative attractiveness of online vs. brick and mortar shopping. High relative attractiveness accelerates reentry.

 

occasional_buyer_abandonment_rate = Independent_Occasional_Buyer * online_shopping_abandonment_fraction

Units: People/Year

The rate at which occasional buyers stop shopping online and return to brick-and-mortar shopping.

Uses:

Former_Category_Shoppers - Category shoppers that have abandoned the online market.

Independent_Occasional_Buyer - This group represents purchasers of moderate volumes who are not affiliated with any particular online retailer.

 

reentry_fraction = NORMAL_REENTRY_FRACTION * relative_attractiveness_of_online_shopping_vs_bricks_and_mortar

Units: 1/years

The fractional reentry rate of former online shoppers is a normal fraction modified by the relative attractiveness of online vs. brick and mortar shopping.  High relative attractiveness accelerates reentry.

Uses:

entry_of_former_category_shoppers - People who abandoned online shopping in the category may reenter the market at a fractional rate that depends on the relative attractiveness of online shopping compared to brick and mortar alternatives.

 

REFERENCE_PROBABILITY_OF_BROWSING_ONLINE_SHOPPING = 0.06

Units: dimensionless

The probability people will try online shopping after a word of mouth encounter when the relative attractiveness of online shopping is neutral.

Uses:

probability_of_browsing_online_shopping - The probability people will try online shopping after a word of mouth encounter.

 

TIME_TO_BECOME_AWARE_OF_ONLINE_SHOPPING = 0.5

Units: Year

For most people, it takes a certain familiarity with the web before they consider purchasing online. The migration time is the average time required for people to migrate into online shopping.

Uses:

increase_in_browsers - The flow of people who start visiting online retailers websites but haven't yet made any purchases. Active only after at least one online retailer enters the segment.

 

TIME_TO_BECOME_COMFORTABLE_BUYING_ONLINE = 2

Units: years

It takes the average online-user two years to become comfortable with the idea of buying online.

Uses:

increase_in_actual_online_shoppers - The rate at which people start buying online. The greater the attractiveness of each online firm, the faster potential shoppers try the service.

 

total_high_volume_buyers = Independent_High_Volume_Buyer + SUM(Loyal_High_Volume_Buyer[company!])

Units: People

The total number of high-volume buyers, including independents.

Uses:

fraction_moving_from_occasional_to_high_volume - A fraction of the occasional buyers become high-volume buyers each year as they grow more comfortable using the online service. This fraction falls as the total number of high-volume customers approaches a maximum. Note that the size of the high volume segment does not depend on the attractiveness of online shopping vs. brick and mortar. This reflects the assumption that total purchases in a category are not affected by the availability of online shopping.