You are reading Part III in a series about how I (a software engineer) navigated the move from Australia to the SF Bay Area in 2016.
You may be interested in reading Part I (covering my personal background) and Part II (tips on how to find a job in SF).
When I moved to the US, I didn't go through a formal interview process with the two companies I was already connected to.
Since we were already familiar with each other, our various meetings were somewhat of a formality.
In hindsight, I probably should have interviewed more widely, even if that meant a cold application at more prominent startups.
My main reason for saying this is I did not maximise my compensation when we first arrived.
Firstly, I was generally unaware of the absolute gulf in pay between engineers at equivalent levels in Australia and the top-tier tech cities in the US.
I'm guessing the market rate for engineers in San Francisco is between 2X to 6X more than in Australia. Note that the multiplier is this high only in the top US cities for tech (i.e., SF, New York, Seattle, and maybe LA).
In 2016, I was asked what my pay expectations were. I mistakenly asked for something "reasonable" based on my Australian experience - USD $125,000 yearly. This would have been around AUD $140,000 at the time.
Both startups must have been secretly laughing to themselves.
I accepted an offer at USD $150,000 after the company unilaterally gave me a higher amount (I wonder if they felt guilty going lower!). Within a year, the company had given me raises to around USD $180,000, so I suspect I was definitely under market rates.
This was just for base salary, which doesn't include the equity component of compensation.
One significant difference with Australia is that a large component of your compensation at US tech companies will be in equity. This usually takes the form of stock options or RSUs and can make up more than 80% of your compensation.
Especially at any level above Senior Engineer, you should expect more than 50% of your compensation to be equity-based.
I had received equity when working in Australia previously. Still, it was 10-20% of my compensation - so I treated it more like a bonus than part of my core compensation.
So now you know to look more closely at any equity component in your offer.
But how do you value equity?
Fundamentally, the equity value is variable, and orders of magnitude less predictable than your base salary paid in cash.
This is exacerbated if you are considering an offer from a startup with no publicly traded equity component. The startup will obviously tell you the equity is worth a LOT, based on a formula that looks something like this:
Funny startup valuation maths:
Value of options based on recent funding round ($100,000) + increase in value when we "change the world" ($10 million)
How much you value or discount this when accepting an offer is up to you.
Still, I suggest treating any equity that cannot be readily sold as $0. Better to receive a significant bonus on the slim chance your equity becomes realizable (either the startup acquired or has a public listing) than to rely on it.
Back to my story, with the startup which offered me a job in 2016.
My job offer included a certain amount of stock options, valued at $150,000 over 4 years (based on the last valuation round) or $1.5 million (because, of course, the startup would go public).
I calculated this with a ~50% discount to the last valuation round. I thought of myself as having received an offer for a $150,000 base salary + $20,000 annual equity (i.e., $170,000 total compensation).
Seven years later (i.e., today), that equity still cannot be sold, so it could arguably be worth $0.
Three years later (in 2019), I understood more about how compensation worked in the Valley.
I no longer wanted to work for a startup that was still many years from being publicly traded. Similarly, I did not want to work for a company that was already publicly traded since I believed there was limited upside.
With that in mind, for my next role, I only considered late-stage companies that I believed would IPO within the next 3 years.
Luckily, I received a few offers from companies with this profile.
By this time, the offer I accepted in 2019 was for USD $190,000 base salary and $100,000 a year in RSUs. This still required some discounting since the equity was not publicly traded, but theoretically, this was $290,000 total compensation.
However, aiming for a late-stage company paid off in a big way for me. Within two years, the company went public, and the value of my equity increased by 6 - 10X.
My original offer (with some subsequent raises and bonuses) was now worth more than $1 million a year 🤯
I should have aimed for this compensation when I arrived in the US. At the very least, I should have been aiming for somewhere between $400,000 to $700,000 as a Senior / Staff / Principal engineer.
The key to knowing your market rate lies in two communities. If you are an Aussie engineer coming to the US, you must check out both levels.fyi and the Blind app. Both of these are more accurate sources, don't trust outdated communities like Glassdoor. Please don't make my mistake!
Note: These two communities tend to indicate much higher compensation bands than the rest of the US. They are overweight with participants from the largest tech companies in the top cities. These pay bands apply to only a tiny proportion of US software engineers. Still, they are not uncommon - many thousands of engineers are being compensated at these levels.
As I said, equity value is highly volatile, and landing on a positive outcome is mostly luck.
The 2019 offer I accepted was worth > $1m a year because the startup had a successful IPO. If the public listing had happened a year earlier or a year later, I believe that equity value would be worth a fraction of that.
At the time, I had 2 other offers from similar late-stage companies. As of today, one of these was acquired, with the equity slashed to one-tenth of the offer price. The other is still privately traded (the company floundered after a founder faced some harassment allegations!).
Of course, evaluating a job offer is only relevant once you receive one or more offers.
To get offers, it's essential to realize the different interviewing styles for tech in the US.
In Australia, it's not uncommon to be offered a software engineering role based on a traditional experience-based interview. You know the ones - your interviewer spends an hour asking about what you did in various situations, how you reacted, what you would do differently, and so on.
For many US tech companies, these are less common or are only used as one interview in a set of 5 to 6 interviews.
The two other common interview types to be aware of are:
Leetcode-style coding interviews
System Design interviews
Many tech companies in the US, especially the larger ones, will use Leetcode-style interviews.
These are usually 40 - 60 minute interview rounds where you are asked to write code on your laptop, with questions generally focussing on algorithms and/or data structures.
Whether you agree or disagree on their effectiveness, the chances are high that you'll encounter these when interviewing. So I suggest preparing for these - many candidates spend months practicing various problem sets on Leetcode.com.
The good news is these interview types are fantastic for those without too many connections or experience. So long as you perform well on these interviews, your chances of receiving an offer are much higher.
Assuming you are looking for a software engineering role requiring more than 3 years of experience, you will likely also have a System Design interview round.
Many companies use these rounds to differentiate between extending an offer for a mid-level Software Engineer vs. Senior+ levels. So doing well on these interview rounds will likely add a few hundred thousand to your annual compensation - that should be enough incentive to practice these!
These are often conducted on a whiteboard or other freeform drawing medium. You'll typically have 45 to 90 minutes to work through several variations of a design problem. Your interviewer is looking to see if you understand standard technologies' advantages and disadvantages and know how to think through load handling, failure cases, redundancies, etc.
If you're unsure what these mean, you may not be ready to target these roles.
If they sound familiar, but you need to freshen your memory, there are lots of different resources to practice with.
Each company will have different interviewing processes. However, many tech companies commonly have a two-stage interview process for software engineers.
The first stage is shorter and more straightforward, filtering out the unsuitable candidates. Think of this as the screening stage. At this stage, you'll likely have some combination of the following: A phone screen with a recruiter or hiring manager - usually 20 to 45 minutes. This will be a brief phone call to discuss the role and its alignment with your work experience. A coding screen - usually 45 to 60 minutes. This online call often asks you to solve a relatively simple code problem. Live coding platforms like HackerRank are often used.
You'll be invited to the onsite stage if you pass this stage. It's called an onsite because many companies conducted these in person at their offices before the pandemic. While this practice continues today, you'll just as often find the "onsite" to be held virtually on a single day over Zoom.
The onsite rounds are intended to be more detailed than the initial phone screens. It's not unusual for this stage to consist of 3 to 6 separate interview rounds held on the same day, with different interviewers, and focussed on various engineering aspects.
Here are some common onsite interview types:
1 or 2 coding interviews, often using the Leetcode-style questions I mentioned earlier.
1 or 2 system design interviews.
1 or 2 Values / Cultural Fit discussions, where you'll be assessed on how you reacted to different situations.
Often you'll have lunch and/or coffee breaks where you'll be matched up somewhat casually with existing team members. Expect most of these rounds to take between 45 to 90 minutes each.
It can be a somewhat draining day!
Most of what I described above will apply if you are applying for Engineering Management roles.
Yes, you will often be expected to code as a manager - tech companies pride themselves on having technical managers who are fluent in the systems they work on.
I would still practice Leetcode questions, particularly system design questions. Most companies expect Engineering Managers to be at least as proficient at system design as Staff Engineers.
When interviewing, your screening and onsite stages will likely replace a few of the coding rounds with interview rounds focussing on team building, delivering product features, and working with cross-functional stakeholders.
Hopefully, these pointers on compensation and interviewing will help you move to the US. Continue reading Part IV to find out which visa I used to work in the US.