The software engineer compensation flywheel
Why silicon valley compensations grow faster than inflation and why going remote means a pay cut
$133,000/year is the average salary of a software engineer in 2022 in San Francisco, CA, according to Glassdoor.
Ten years ago, I was offered $85K for such a position in this city. This offer seems small today but was rather of a typical size back then. It was definitely not on the low end of the spectrum.
What happened in the past ten years? Why did pay rise three times faster than general inflation?
Everything starts from market rates
Since I left the States, my experiences abroad allowed me to see a different side of HR that many engineers may not have seen.
I moved to Singapore through an internal transfer program. While I kept my level and options, I was forced to take a pay cut! The person who took the news hardest was not me but rather my head of HR. We sat down, and he gave me a rundown of the situation:
Given the difference in market rates and tax rates between the countries, the company cannot simply convert your pay from US dollars into Singaporean dollars.
The pay needed to make sense within Singapore’s “market rate.” This meant a major pay cut and having to enforce this cut was what troubled him. He asked for a week to set things right, and he delivered. Although I could not keep my top-line number, I kept a similar take-home pay.
A standardized HR process
Market rates drive the compensation package. The HR team can conveniently acquire this dataset from data aggregators like Option Driver.
Their business proposal is pretty smart. If a startup wants to use its data, it must also contribute its compensation plans back into the system. In this way, the aggregator always has the latest compensation packages in their database.
This platform allows HR to dice up the compensation by location, role, and level. (You can even filter by the company’s funding level.) For example, if I wanted to hire a software engineer in San Francisco, the HR team would input this parameters. The aggregation platform will then output the following graph:

This graph shows the distribution of all compensation that matches the given parameters. The HR team will look at the quantiles and benchmark the company’s offer to these levels. For example, a run-of-the-mill company would select a number slightly above the median. In the graph above, slightly above the 50th percentile mark is around $133,000.
This practice is standard in the valley. If you got an offer for a software engineering position in San Francisco today, your number should not be below this.
The runaway flywheel
Switching jobs every 2-3 years is the best way to maximize pay.
This adage is commonly repeated in Silicon Valley because it’s true. No company expecting to hire talent successfully would pay below the market rate. So every time you get an offer, the base salary number will be the median or higher.
When an entire city hires people like this, the median will shift. Compounding this over time, we have a runaway flywheel that continuously moves the median further to the right.
This positive feedback loop is why compensation in cities like San Francisco grows faster than CPI. As long as there are investors backing companies who continue to hire with this process, this trend will continue.
What are you actually paying for?
I would argue that an employee’s worth to the company is independent of the city they reside. For example, if you worked in San Francisco then transferred to Tokyo, you still provide the company the same value.
However, compensation paints an entirely different picture. You should not be surprised that half your paycheck stayed behind after moving to a new city. Most cities in the world do not have this runaway flywheel.
Comparing San Francisco and Tokyo, two of the most expensive cities, the top earners in Tokyo make less than a typical engineer in San Francisco. Maybe you might argue that the required skillsets are on a different level, so the comparison is not necessarily fair. Let’s compare with a top Japanese tech unicorn, SmartNews.

You still see the same pattern.
The compensation package values your zip code over your title, skills, loyalty to the company, etc. If we were to rank the most important factors to get the best compensation as a software engineer, this would be the order:
Your residential zip code
Your position/title
Your skills
Compensation is broken for remote teams
Since COVID, the workplace has changed. Many have left the city and moved to smaller towns. Many companies broke their office lease and became remote-only.
Remote work is here to stay. More teams will be international, not only by birth but by choice where employees choose to live. The teams I have managed are international by choice. The individuals are superbly skilled, and as a whole, they make a great team. There is no way I can justify a 30-50% pay gap in the team for the same role when one person chooses to work from San Francisco and another Tokyo.
At previous employer, I worked with the HR team in headquarters to make the packages fairer. Initially, we attempted to pay the 95th percentile for staff in Tokyo. From the graph above, even at the 95th percentile, Tokyo’s compensation could not meet San Francisco’s median pay. So we settled with a policy that directly kept the Tokyo numbers close to San Francisco’s.
A remote-first compensation plan
A remote-first world breaks the market-rate-first compensation policy whose goal was to produce the cheapest yet enticing package to poach talent from companies next door. Hence, it emphasized winning in the local market over all else.
In a remote-first world, there is no need to compete in the local market. How then should be do compensations?
I am a fan of Buffer’s compensation philosophy. Your compensation is comprised of just two parts: your role and your cost of living. The role is benchmarked to the median salary of a given title and level in San Francisco. The cost of living is a modifier to the prior:
x1.0 for a high cost of living cities like San Francisco
x0.85 for an average cost of living cities like Madrid, Spain
In this manner, all salaries are pegged to a global standard. And there are no surprise massive pay cuts if your city of choice happens to not compensate developers well.
Taking this one step forward, Buffer aims to eliminate even the cost of living factor. I think this is a step in the right direction. Engineers, being knowledge workers, should be compensated for the value they bring and not address where they live.