Author Archives: Lou Franco

Design by Comparing Opposites

In my podcast episode, Write While True Episode 7: Find Your Voice, I tried to express an idea that I find is useful in a lot of contexts. There are some choices where you are trying to make something specific or differentiating—in those cases, one way to know that you’ve done it is to see if the opposite choice is also reasonable.

In this case, I was talking about trying to find my “voice” in the podcast—what makes it mine and not generic. I recommended Joanna Wiebe’s video on voice and tone.

But, I cautioned against a voice that was “smart”. I said:

I actually don’t think smart is a good choice because the opposite of smart is very rarely appropriate. Everyone would choose to sound smart.

When you have a generically positive aspect that you want (like smart), a useful technique is to consider opposing ways to achieve it.

I recommended considering the choices of “expert” or “fellow learner” instead of smart. Both voices might be smart, but they are specific, opposite, and both are reasonable.

This is also a good technique in job seeking. It’s easier to find what you want if it’s not something that everyone would claim to have.

Sending a clear signal that “this is not for you” is the only way the people that it is for will recognize it.

Write While True Episode 11: Quantity and Quality

I know that a lot of my episodes are variations on the theme of quantity. In episode one, I asked you to write morning pages every day. In episode 4, I asked you to make a schedule where you write multiple days a week. I’ve talked about the importance of producing many first drafts. In episode 8, I said you should lower your bar and just last week I shared my personal “why”, which is all about playing the infinite game because it’s fun. The title of this podcast is a play on the idea of the infinite game.

Transcript

My Third Lesson in Personal Finance: Optionality

My early career was in writing financial options software, so I’ve been around the concept for options for a long time. The general characteristic that’s important to understand is that it has a fixed, low cost and a (low-relative-probability) of very high upside.

My ex-boss, Philip Brittan, wrote this piece about optionality back in 2014 on an internal blog and recently posted it publicly. It goes over the technical details, but generally, when I read it I was reminded about the power of the generic concept of options when applied more broadly.

He ended: “In general, you should be on the lookout for situations that naturally make you long options and give an asymmetrical (‘unfair’) advantage”. (being “long options” means you have options — as opposed to short, where someone has options on you).

Applied broadly, there are many things that “have optionality”. For example, renting instead of buying. But, for now, let’s concentrate on optionality in compensation.

At the time I read this, I was consulting. The kind of optionality that consulting offers is options on opportunity and freedom. You can easily change what you are doing or when and where you work. You can stop and start at will, comparatively. But, in consulting, pay is mostly tied to work and does not have options-like returns.

Before that, and for most of my career, I worked for startups that had some kind of optionality in the pay structure. My first job had an unlimited profit-sharing bonus pool that was literally a percent of profit that was not capped. At other times I had equity-like instruments, options, or RSUs. I also did limited work for free for a share in future profits.

My personal finance plan was just a normal compounded returns and high savings with an exponential curve, but when I look at what actually happened, there are these moments of step-wise lumps when one of these options paid off. I was lucky, for sure, but also, I took a lot of shots.

The key was that my options mostly felt free to me. I was completely satisfied with the job and guaranteed pay, so the option was extra. It might be true that I could get more elsewhere, but I was satisfied.

My default plan would still work.

I think of optionality in compensation the way some people think about playing the market with “play money”. I’d be ok if the options expired worthless. It’s another way I think programmers can “beat the market” with labor instead of by picking stocks.

The Downside of Saving

I have written a few posts lately to convince you to increase your savings rate.

Increasing your savings rate is the easiest lever to pull in increasing your net worth. To do that, I mostly suggest increasing your income:

If you increase your income and mostly save it, that effect will compound on itself and with the market. The end result is significant.

But, surely there’s a downside, right?

When you save money, you are forgoing whatever benefit you could have by spending it now. That spending could be considered investment or consumption.

If the spending is truly an investment, then I think it’s worth considering. I am not talking about Bitcoin or $TSLA, I am talking about

  • Books in your industry
  • Coaching
  • A course
  • Equipment (a laptop, a smart phone, a cricut) if treated like factory equipment
  • A conference

A lot of this stuff is deductible against business income (see my taxes post). If you could deduct it, then I’d say it qualifies as investment or a worthwhile expense. I’d also extend this to serious hobbies and fitness. Of course, you need to keep it in line with your income.

In spending that is for consumption, I would follow Ramit Sethi’s advice to spend on things you love and cut mercilessly everywhere else. Also, he says to ask the $xx,000 questions (e.g. saving on a mortgage) and not the $x dollar question (e.g. lattes).

Spending that is an investment pays off in some way over and over. This doesn’t need to be money. If you spend on fitness, your improved health gives you benefits. If you learn an instrument, you will get enjoyment from playing for the rest of your life.

Consumption is more about enjoyment in the present. You absolutely should do that, but this is where you need to be careful as we’re built to value short-term pleasure (see The Pleasure Trap [amazon affiliate link] book or watch the TEDx talk).

Having money in the bank is good, but ultimately, you do need to spend it to get any benefit. But, please don’t use that as an excuse to waste money.

Consider C4 for Systems Interviews

I recently ran into the C4 model for visualizing software architecture. It’s simple and notation agnostic (meaning, you don’t need to learn the meaning of arrow heads).

One of the things I noticed in giving systems interviews is that the interviewee didn’t have any kind of coherent way to visualize their system. So, it was hard to understand what they were saying.

The benefit of C4 is that it’s just slightly more organized than doing nothing. It also asks that you provide a key/legend for any notation choices you make.

I think that most of the benefit comes from the suggestions to use more text. For example:

Boxes have a name, type, and a short description. Think of it like this: NAME is a TYPE that DESCRIPTION.

A C4 container box that describes "Sprint-o-Mat' as a watchOS App that guides you during an outdoor run

Arrows form a sentence when read as “BOX A” — “arrow text” –> “BOX B”.

A C4 container diagram that says that Sprint-o-Mat stores workouts in HealthKit

The idea is that the diagrams are stand-alone and are mostly organizing short text snippets.

They are also hierarchical—meaning that if I need more information, there would be possibly be a set of sub-diagrams for each box. Without C4, I think many people would just have the boxes with just the names (titles) and unlabeled arrows.

The metaphor is a map that starts zoomed out and gets more and more detail as you zoom in.

I am mostly suggesting this as a sketching/communication visualization using a whiteboard. But if you are trying to do C4 to keep real diagrams, then generating them from some kind of DSL is much better. PlantUML provides a free solution, and the author of C4 has a freemium solution called Structurizr.

How I Used the Net Worth Estimator

Background

How I used it

Fifteen or so years ago, my wife and I built a spreadsheet model for ourselves that is a lot like this but tweaked for our specific situation. It was very simple.

We played with it until we found a savings scenario that was both doable and would help us reach our goals. We kept market return expectations low because that drove us to be serious about savings. The fact that we’ve been in a long bull market helped us, but we didn’t count on it.

Then, each year, we plugged in actual numbers. The model was a kind of benchmark—we could see what we needed to do in order to reach our goals.

When the market tanked in 2008, we could see what the eventual effect was. And, also we could see how the recovery brought it back in line.

So, use the model more as a benchmark or goal and track your actual numbers against it.

Once you have something you think is good, move the inputs around to see how sensitive the results are to each number. The main thing to notice is that there’s an inflection point where your savings grow or shrink after retirement.

My suggestion is to try very hard to get to the point where it grows. You can see that this is possible at a range of salaries, not just 6-figures, but requires that your expenses are in line.

I will also say, that being aggressive early and then adjusting later is a good strategy.

If the market tanks early, you are still in the mindset of low-expenses, so you get to take advantage of the dip and historically, it comes back. If the market out-performs, you had more money in it.

We looked at it once a year to see if we needed to adjust anything.

Disclaimer: I am not a financial professional and this is not financial advice. I don’t know your specific situation. Get professional advice from a fiduciary who will look at your specific situation.

Beating the Market Addendum: Taxes

A few days ago, I wrote about how programmers can beat the market in their investments

The key is to invest in yourself and either increase your value in the labor market or sell products. If you think of the extra income you earn as “market return”, then you can easily add a few percent to your overall return with minimal risk of downside.

But the astute among you might have realized that income is tax disadvantaged vs. capital gains (from stock returns). And, that if you buy and hold stocks, then you can defer taxes. But if you make income, you need to pay taxes immediately.

And since I am advocating you getting side income or raises, this extra income is at your highest income tax bracket.

DISCLAIMER: I am not a CPA or financial advisor and even so, it is May 2021, so everything I am saying is possibly not true if you are reading this in the future. Also, this is US only. Check with your accountant to see what the effect is to you personally. Also, I am intentionally simplifying some things because the actual tax law is way more complex than this.

Also, my original article and this one assumes you are a programmer, which is why my salaries in the example are 100k and over 140k. A lot of this math doesn’t work unless your salary is in that range. At lower income, long term capital gains tax is 0%.

For this analysis, I am assuming you are single. The numbers are different if you are married, but the idea is the same.

Here’s an example:

Let’s say you make a salary of $100k, and you get $10k of extra income. If you are single, that $10k has federal tax of about 24% and FICA of 7.65% (you may also have state taxes). If you get this money via consulting or selling products, you pay another 7.65%. The total rounds up to 40%. (BTW, I know it’s more complicated than this, but this number is approximate)

But if you buy and hold stocks that go up an extra $10k over the market, your tax bill is $0. You only pay tax if you sell stocks. So, eventually, when you do sell them, it will probably be 15% long-term capital gains. Again, it’s more complicated than this, and in 2031, when you sell, who knows what the tax law will be, but 15% is our current best guess.

So, of the extra $10k, you keep about $6k if it’s side income, $6.8k if it’s a raise, and eventually $8.5k if it’s market gain.

Now, if you day trade stocks or bitcoin and don’t hold your positions for a year, then the gains are taxed at the same rate as wage income, so 24% in our case (no FICA). So you keep $7.6k instead of $8.5k.

You still pay less tax trading, but the good news is that it’s not that simple. 

I’m ignoring state tax, because mostly that’s a wash, but you need to check because in Massachusetts, short-term gains get taxed at 7% more than wage income (12% vs 5%). I live in Florida, which doesn’t tax income or gains. So, it could make a big difference depending on where you live.

The biggest tax savings are from maxing out your social security tax.

I used $100k base salary, but in 2021, if you make $142.8k, you max out your social security tax and only pay the Medicare portion on your side income, so that’s 2.9% instead of 15.3%. Your tax bracket is about the same, so now you pay 27% of the total vs. 24% for a day-trader. If the new income is a raise, then you pay 1.45%, so a total of 25.45%.

If your new income is a raise, you can further lower your taxes by increasing your 401k (or other tax deferred) contribution. If you get a $10k raise, and can put all of that in the 401k, then your tax rate is 1.45% for Medicare. 

To be fair, as long as you have enough wage income, you could effectively do this with your market return by contributing the equivalent amount of wages, so it’s a wash. But I want to mention it because it’s the first thing you should consider doing with extra income no matter how you get it.

If you make the money on the side, you can lower your taxes in ways that don’t apply to market returns.

There’s a QBI deduction of 20% on net business income. So, you only pay tax on $8k of the side income. So it’s an effective rate of ~22%. 

Now we just beat the day traders who pay ~24%. 

But what about the stock pickers that buy and hold? We still have to make $11k for each $10k they make (again, that’s not hard).

Even if you max out your 401k, you can put 20% of your net business income in a solo 401k (or other business tax deferred vehicle).

So, if you make $10K, you could put $2k in the solo 401k, deduct $1.6k (QBI) and only pay the 24% tax on $6.4k and another 2.9% on the $10k. So your effective take-away is about $8.2k, with an effective tax of 18%.

Remember, this is all approximate, I am not a CPA and there are more things to take into account. For example, you eventually pay tax in retirement on the money in the 401k.

Also, I didn’t take any normal business deductions into account, like home-office, computer, tech books or courses, business group membership fees, etc. If you can deduct about 5% of the income, your effective tax rate on the side income is lower than 15%.

But the takeaway is that you can get your tax bill in the same range of the day traders with extra wage income if you already max out your Social Security contributions. It’s not as tax-disadvantaged as it seems at first.

The traders pay something between 15%-24% depending on how long they hold, and you pay something between 18% and 27% if you max out Social Security at your day job. And you can get it even lower with business deductions.

You do need to add another 12.4% if you don’t max out SS—so go get a raise to get you closer to maxing out.

Of course, you lose the option of negative tax that comes from stock picking losses, but we can live with that.

Write While True Episode 10: Finding My Why

The exercise this week is to think about your “why”? I don’t think it’s wrong to write for money or fame, but if you’re an amateur like me, I’d find something easier to attain.

Transcript

Using Market Data in the Python Net Worth Estimator

When I first made the python version of the net worth spreadsheet, I used a function like this:

def netWorthByAge(
    ages, 
    savingsRate = 0.18, 
    startingNetWorth = 10000,
    startingSalary = 40000,
    raises = 0.025,
    
    marketReturn = 0.06,
    inflation = 0.02,
    
    retirementAge = 65
  ):

You could pass in parameters, but only constants. This is how the spreadsheet works as well—each cell contains a constant.

The first thing to do to make it more flexible is to use a lambda instead for the marketReturn parameter:

marketReturn = (lambda age: 0.06),

Then, when you use it, you need to call it like a function:

netWorth = netWorth * (1 + marketReturn(age - 1)) + savings

We use last year’s market return to grow your current net worth and then add in your new savings.

The default function is

(lambda age: 0.06)

This just says that 0.06 is the return at every age, so it’s effectively a constant.

But, instead, we could use historical market data. You can see this file that parses the TSV market data file and gives you a simple function to look up a historical return for a given year.

Then, I just need to create a lambda that looks up a market rate based on the age and starting year:

mktData = mktdata.readMktData()
for startingYear in range(fromYear, toYear, 5):
  scenario = networth.netWorthByAge(ages = ages,
    savingsRate = savingsRate, 
    marketReturn = (lambda age: mktdata.mktReturn(mktData, age, startingYear = startingYear))
  )

And this will create a scenario (an array of doubles representing net worth) for each year in the simulation.

You can download and run the code to play with it. Here’s a sample chart it generates:

There are lines for starting the simulation in 1928, 1933, 1938, 1943, 1948, 1953, and 1958. This gives you an idea of the expected range of possibilities.