********************************
.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
Units: Year
The final time for the simulation.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.