For tech startups, the most critical ingredient is access to talent. Without this, growth can be severely impaired. The market for talent is competitive and unrelenting as key staff are constantly being head hunted. Multinationals, financial institutions and established tech companies all battle to secure the most promising employees, particularly for scarce technical know-how. With elevated salaries, scintillating benefits, and job security, how can startups compete? One key advantage startups hold over the titans is the lure of a small company culture and vision. It’s exhilarating to be part of a close-knit team, on a mission to spawn something truly innovative – and this can be a considerable attraction for talent. Startups can also offer a more potent benefit: ownership.
Stock option grants are one of the key reasons Silicon Valley has been so successful. The way you dangle the carrot is sometimes as important as the size of that carrot. Small startups with meager cash resources have managed to attract some of the world’s best talent because there was a chance to own a stake in a company that could ultimately become enormously valuable. Small companies often do not have the financial depth to offer high performing employees salaries commensurate with their mature, publicly traded peers. They must attract and retain employees through other means, including the bestowing of greater responsibility, flexibility and visibility. Above all else, incentives count. Stock options align interests across the key stakeholders. Private companies may also use stock options to pay vendors and consultants and conserve cash in the process. Please check out this video below to see how private companies globally can achieve this end.
For incentives to work, employees must be able to attribute value to those Stock options. This implies knowing the value of the piece paper of paper that says you have a claim on your company. The Black Scholes (1973) model and lattice models are viewed as the appropriate valuation tools that comply with international accounting standards. Lattice models are generally considered to provide a sounder theoretical treatment. Accountants nevertheless commonly rely on Black and Scholes (1973) because considerable costs are incurred in switching to a binomial/lattice framework. (We eliminate some of these computational costs with the model developed below.) For a slightly more technical explanation but still highly intuitive:
The implementation outlined below demonstrates how ESOs can be valued with VBA code. VBA code is protable to Excel so anyone can introduce the Function into Excel. Also, I include in a pdf link to the valuation algorithm if needs be. Hull and White (2004) developed a lattice pricing model that furnished a methodology for estimating ESOs. A key downside however relates to technical issues regarding convergence and speed. For accurate valuation the Hull and White (2004) model can take several hours to produce verifiable results given oscillation. We improve on that model and dynamically specify a lattice array that spares computer memory and reduces dramatically estimation time. This implies small businesses can within a spreadsheet run their own estimation and not be totally reliant on consultants/experts to make the estimation and even sometimes judgement calls. See VBA code and video for implementation below. The volatility input for the model can be estimated using GARCH, Implied Volatility, Volatility Surface or by using a methodology consistent with estimating the 30-day VIX. All of these have been described and implemented in this portal.
// The VBA code available here; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation.
// Please cite:
Byrne, Brian and Shang, Qianru and Zhang, Yinqiu, Accounting for Employee Stock Options: Accelerating Convergence (January 9, 2018). Available at SSRN:
https://ssrn.com/abstract=3098879
or http://dx.doi.org/10.2139/ssrn.3098879
// The code is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// http://www.fsf.org/copyleft/gpl.html
Function Dyn_Trun_HWBL(Stock As Double, X As Double, T As Double, Vest As Double,_
Interest As Double, Sigma As Double, Divrate As Double, Exitrate As Double,_
Multiple As_ Double, n As Integer)
Dim dt As Double, r As Double, u As Double, d As Double,_
p As Double, StoppingOpt As Double,i As Integer, j As Integer,
VestInt As Integer, Condition As Integer, NumZero As Integer, NumStopping As Integer
'Boyle and Lau
For i = 1 To n
If n < Int((i ^ 2 * Sigma ^ 2 * T) / (Log(Multiple * X / Stock)) ^ 2) Then
n = Int((i ^ 2 * Sigma ^ 2 * T) / (Log(Multiple * X / Stock)) ^ 2)
Exit For
End If
Next
ReDim Opt(n)
dt = T / n
r = Exp(Interest * dt)
u = Exp(Sigma * Sqr(dt))
d = 1 / u
p = (Exp((Interest - Divrate) * dt) - d) / (u - d)
VestInt = Int(Vest / dt) 'The last column in the vesting period
NumZero = Int((Log(X / Stock) / Log(u) + n) / 2)
NumStopping = Application.Ceiling((Log(X * Multiple / Stock) / Log(u) + n) / 2, 1)
Finish = NumStopping - 1
'Distinguish two conditions:
StoppingOpt = Stock * u ^ (2 * NumStopping - n) - X
Condition = 0
If Stock * u ^ (2 * (NumStopping - 1) - (n - 1)) >= X * Multiple Then
StoppingOpt = Stock * u ^ (2 * (NumStopping - 1) - (n - 1)) - X
Condition = 1
End If
'Defining the option value of nodes at the maturity
For i = 0 To NumStopping - 1
If i <= NumZero Then
Opt(i) = 0
Else
Opt(i) = Stock * u ^ (2 * i - n) - X
End If
Next i
'Option Pricing Loop
For j = n - 1 To 0 Step -1
'Start: Truncate "zero" region
If j >= n - NumZero Then
Start = NumZero - (n - 1 - j)
Else
Start = 0
End If
'Option pricing after vesting period
If j > VestInt Then
'Finish: Truncate "redundant proactive early exercise" region (St>=Multiple*X)
If Finish <= j Then
If (n - j) Mod 2 = 0 Then
If Condition = 0 Then Finish = Finish - 1
If Condition = 1 Then Opt(Finish + 1) = StoppingOpt
Else
If Condition = 0 Then Opt(Finish + 1) = StoppingOpt
If Condition = 1 Then Finish = Finish - 1
End If
ElseIf Finish > j Then 'No proactive early exercise at j column
Finish = j
End If
'No proactive early exercise, only passive early exercise (St<Multiple*X)
For i = Start To Finish
Opt(i) = ((1 - Exitrate * dt) * (p * Opt(i + 1) + (1 - p) * Opt(i))) / r + _
Exitrate * dt * Application.Max(Stock * u ^ (2 * i - j) - X, 0)
Next
'Option values of proactive early exercise nodes at (Vest/dt+1) columnn
If j = VestInt + 1 Then
For i = Finish + 1 To j
Opt(i) = Stock * u ^ (2 * i - j) - X
Next
End If
'Option pricing during vesting period
ElseIf j <= VestInt Then
For i = Start To j
Opt(i) = ((1 - Exitrate * dt) * (p * Opt(i + 1) + (1 - p) * Opt(i))) / r
Next
End If
Next
Dyn_Trun_HWBL = Opt(0)
End Function