Time Value of Money in Finance and Investment For Software Developers
Benjamin Franklin once said: “Remember that time is money."
The Time Value of Money (TVM) just means that money in your hand right now is worth more than the same amount of money that you will receive in the future.
The idea is that money available at present is more worth than the same amount in the future. The core principle of finance:
‣ Invested capital can earn interest
‣ Any amount of money is worth more the sooner it’s received.
The underlying fundamentals of the time value of money are often used to value investments like stocks, bonds, credits.
Let’s search for equivalent amounts of money on time:
Would you prefer to get $1000 today or $1000 one year from now? – I bet that you would say $1000 today.
What about the choice between $1000 today or $1001 next year? – I am pretty sure that you would still prefer the $1000 today. Not the last reason is inflation because it will bring up that extra $1 or more. So you might be even worse off. It’s better to take the $1000 now and not wait a year for just $1.
“A bird in the hand is worth 2 in the bush."–Proverb
Let us make other more common examples of cash flow value today vs. in the future.
If you receive $200 per year for the next six years, what is the net present value if the current inflation rate is 3%:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
r = 0.03
cash_flow = pd.DataFrame({'Year': [1, 2, 3, 4, 5, 6],
'Cash': [200, 200, 200, 200, 200, 200]})
# PV (Present Value) = Cash (at period 1) / (1 + r)^n
cash_flow['PV'] = cash_flow['Cash'] / (1.0 + r) ** cash_flow['Year']
npv = cash_flow['PV'].sum()
print(round(cash_flow))
Year  Cash  PV 

1  200  194.0 
2  200  189.0 
3  200  183.0 
4  200  178.0 
5  200  173.0 
6  200  167.0 
The earned $ in the future will not be worth as much as one made in the present—this discount rate element of NPV (Net Present Value)–the difference between the present value of cash and PV (Present Value) over a period of time.
According to your expectation, in 6 years, you will get $1200, but their worth (NPV) at that time would be:
print('NPV is', + round(npv))
# NPV is 1083.0
As you see, $1200 in the present is $1083 in the six years with the discount (inflation rate in our case) of 3%.
We can also use the same approach to calculate the NPV of uneven cash flows yearly, receiving different cash amounts with the same discount (inflation) rate of 3%:
# Calculate NPV of uneven cash flows
cash_flow = pd.DataFrame({'Year': [1, 2, 3, 4, 5, 6],
'Cash': [150, 200, 250, 350, 400, 450]})
print(cash_flow)
#  Year  Cash 

0  1  150 
1  2  200 
2  3  250 
3  4  300 
4  5  350 
5  6  400 
Looking at the table, you are expecting to get $1800 in total in the six years. You are right, you will have this amount, but with the worth of:
r = 0.03
cash_flow['PV'] = cash_flow['Cash'] / (1 + r) ** cash_flow['Year']
npv = cash_flow['PV'].sum()
print('NPV is', + round(npv))
# NPV is 1596.0
Yes, your present $1800 will be $1596 in the near future of 6 years.
Let’s consider other handson examples of the timevalue of money:
Often we have to calculate the present value of equal payments during determined X years. A good example is a lottery jackpot––$1,000,000 payout. Usually, there are two options for how the winner can receive his money:

Receive five equal payments of $200,000 during the next five years

The lump sum of $940000 (because of 6% of the bank interest rate on the deposit)
At first glance, nobody wants to lose $60000 and would prefer to wait these years while receiving $200,000 yearly till the end of the payout period. After all, $1,000,000 is more than $940,000.
Precisely, we need to think of calculating the net present value to make the right decision. In the financial terminology, it would be called: calculating the present value of a finite annuity.
Let’s see how much worth would be getting your $1,000,000 through 5 equal payments of $200,000 and five years from now with the bank interest rate on deposit of 6%:
payment = 200000
time = 5
rate = 0.06
cash_flow = pd.DataFrame({'Period': np.arange(1, 6),
'PMT': payment})
print(cash_flow)
#  Period  PMT 

0  1  200000 
1  2  200000 
2  3  200000 
3  4  200000 
4  5  200000 
So far, we have created a cash_flow table as we did in the previous tables above to preview the cash flow better.
cash_flow['PV'] = cash_flow['PMT'] / (1 + rate) ** cash_flow['Period']
npv = cash_flow['PV'].sum()
print('NPV is ', + round(npv))
# NPV is 865895.0
$865,895 is the net present value of five equal payments and less than $960,000 offered. Therefore, it’s better to take the lump sum payment of $960,000 and deposit it in the bank once.
As I mentioned before, in the finance world, the last calculation called: the present value of a finite annuity, the more advanced and often applicable concept to investors, especially to real estate investors, is the calculation of the present value of the finite growing annuity.
And here is an excellent example to consider for that:
Let’s suppose you own a complex building with apartments. In your case, it means that the tenants pay you fixed rent monthly. To tackle higher inflation, you decide to increase the rent. Basically, the whole building from the finance side looks like an annuity payment that grows at the inflation rate. So that allows us to calculate the present value of those payments now:

Current rent payment is $800

Growth rate of payments 6%

Inflation rate of 3%

Period is 5 years
rent_payment = 800
time = 5
rent_growth = 0.06
inflation_rate = 0.03
cash_flow = pd.DataFrame({'Year': np.arange(1,6),
'Cash': rent_payment})
print(cash_flow)
#  Year  Cash 

0  1  800 
1  2  800 
2  3  800 
3  4  800 
4  5  800 
The next step is to increase cash flow at the growth rate to beat the inflation:
cash_flow['Cash'] = rent_payment * (1 + rent_growth) ** (cash_flow['Year']  1)
print(round(cash_flow))
#  Year  Cash 

0  1  800.0 
1  2  848.0 
2  3  899.0 
3  4  853.0 
4  5  1010.0 
After increasing the rent payment, we need to calculate the present value of cash flow yearly by considering the inflation rate of 3%:
cash_flow['PV'] = cash_flow['Cash'] / (1 + inflation_rate) ** cash_flow['Year']
print(round(cash_flow))
#  Year  Cash  PV 

0  1  800.0  777.0 
1  2  848.0  799.0 
2  3  899.0  823.0 
3  4  953.0  847.0 
4  5  1010.0  871.0 
If the value of the “Cash” > “PV”, then you did everything right as an investor: you beat the inflation rate and get “gross” returns from the rent payments. You earn money.
Bottom Line
Money has time value due to inflation, deflation, devaluation, etc.
The present value of money helps investors decide the amount they should invest today to receive a particular amount of money with “Gain” in the future.
Take the PV, NPV, and FV (future value) concepts to apply them to calculate the output from your investment opportunities and get the time value of money at any given time. Because a dollar you hold in your hand today is worth more than a dollar you expect to get tomorrow. Mainly because you could invest the dollar you are having now.
If you want to learn more about finance and investment opportunities in general and today’s world, you can become a reader of my newsletter (+bonus: the cheat sheet on how to free extra monthly cash from your devsalary for investment).
Learn to invest with confidence!