Probably pretty late, but I just realized that when computing compensation per year based on stock vests, you are essentially running a convolution of two lists.
L1 = Vesting schedule
E.g. if the vesting schedule per year is 10% for Y1 and Y2 followed by 40% for Y3 and Y4, we could represent L1 = [0.1, 0.1, 0.4, 0.4]
L2 = RSUs allocated per year. Consider an example where you get 500 for Y1, 300, 400, 200 for the remaining years respectively.
Running the convolution across these lists:
Vesting schedule
Grants [500 300 400 200]
Plan [0.4, 0.4, 0.1, 0.1]
$(Y1) = 500 * 0.1 = 50
Yr2
Vesting schedule
Grants [500 300 400 200]
Plan [0.4, 0.4, 0.1, 0.1]
$(Y2) = 500*.1 + 300*.1 = 80
Yr3
Grants [500 300 400 200]
Plan [0.4, 0.4, 0.1, 0.1]
$(Y3) = 500*.4 + 300*.1 + 400*.1 = 270
And so on..
A simple blob of python code to compute:
import numpy as np
schedule = [0.1, 0.1, 0.4, 0.4]
rsus = [500, 300, 400, 200]
print("Your yearly vesting is: ")
result = np.convolve(schedule,rsus)
print(result)
The result is:
Your yearly vesting is:
[ 50. 80. 270. 380. 300. 240. 80.]
References
- GDB2024-001 PDF of this post