In February 2022, I finally moved to the US on O1 work visa. This was preceded by 2.5 years of work on strengthening the case, waiting for approval.
1.5 years before this date, I started preparing for an interview for a Front End position. Currently working as a Senior Front-End Engineer at Roku.
This post and the creation of the telegram channel were motivated by the lack of detailed information about interviews for Front-End engineers in the USA.
Before relocation, I worked for 7 years in outsourcing companies in Belarus. This allowed me to use different technologies, approaches and work on various projects. Prior to relocating, I already held a position as Engineering Manager with 26 JavaScript engineers (this strengthened my CV, especially for a Staff position). Over the past year, I have conducted about 50 technical interviews in the department.
But in the USA, I realized that my experience is not entirely relevant, and I need to start from a Senior position in order to figure out how the processes are built here, the culture, and how to conduct interviews, which are completely different here.
I started preparing for the technical interview 1.5 years in advance while I was waiting for my visa. Every morning of my working week was spent for preparing. It became a habit over time and did not cause any discomfort. After a while, I was promoted to the Engineering Manager position as I was growing at a rapid rate.
1. Leetcode
I solved 245 problems on leetcode. I mostly focused on arrays, matrix, trees, linked lists, strings, hash tables, sorts, and two pointers. In my profile, you can see the topics that I solved.
2. Big Front End (https://bigfrontend.dev/)
I solved 50% of BFE problems (easy and medium). I published all these solutions on my telegram channel. This resource is most useful for interviews at Meta, but other companies are more or less likely to ask similar questions.
3. System design
4. Behavioral interview
On glassdoor, you can find some examples of questions and tasks that companies ask.
Upon arrival, I had a 2-week jet lag, there was no way of passing the interview, I could not sleep normally.
But after I adapted, I began to actively set up calls with recruiters, writing on LinkedIn. There were 20–30 messages with opportunities per day, but most of them are no-name companies or startups.
Before replying to the message, I analyzed the company, investments, it is a public or private company, what they do and what technologies they work with (I basically focused on React.js, JS / TS stack, as well, the Front End position).
This was the original filter.
During the day I had 3–4 phone calls with recruiters, then 2 technical interviews.
In total, I participated in about 20 mocks to understand how to behave in an interview and what my weaknesses are, but this does not compare with real interviews. In real interviews, I already had a noticeable growth, already after 1–1.5 months, I began to solve problems more efficiently, find out requirements, sell myself and answer behavioral questions, because after each interview I did work on mistakes, and corrected stories.
I started with small startups and companies and I was ready for rejection (this is important!).
Every day for 2 months I had phone calls with recruiters, technical screenings, on-site interviews. It is very convenient that now everything is online. After almost a month of technical screenings, I even said that I liked the interview process, there are so many interesting problems and people, but then the onsite time came … after the first 5-hour interview, my opinion changed in a completely different direction, it’s sooo hard!
In the beginning, I had rejections and it was frustrating of course. But as soon as I received the first offer, my motivation immediately grows .. until the next rejection.
I was ready for rejection, but it’s still unpleasant to hear, especially when you spent 5–6 hours and they send you a standard reply that we decided to move with another candidate without any feedback. This motivated me to reflect and analyze what went wrong. I took notes, and tried to find answers on how to solve the problem or what needed to be clarified and how to design something. This helped in future interviews to combine different solutions into one and produce a high-quality solution.
Also, communication with recruiters helped me improve my English, at the beginning I might not even understand half of what they were saying to me, but then I got used to it and it was much easier.
In the end, I had really good interviews, but I kept getting rejected for some of them. And the worst thing is, you don’t understand what went wrong.
My interview stats:
Tech Screens (26): Meta, Amazon, Apple, Google, Microsoft, Lyft, Uber, LinkedIn, Roku, Salesforce, PayPal, DoorDash, Robinhood, Roblox, Intuit, Zoom, Grammarly, Imply, Disco, Square, SigmaComputing, LiveRamp, Zoox, Palo Alto Networks, Snowflake, Aurora
Onsite interviews (15): Meta, Amazon, Google, Microsoft, LinkedIn, Roku, Salesforce, PayPal, DoorDash, Zoom, Grammarly, SigmaComputing, LiveRamp, Zoox, Aurora
Offers: Google, Roku, Microsoft, PayPal, SigmaComputing, LiveRamp
When applying for a Front End position, you will likely be asked only questions about the frontend, but at least 1 algo-problem of the easy-mid level will be asked, mainly about the data structure and its processing (there are not a lot in JS :)). But some like to ask algorithms the old-fashioned way.
All of the preparation materials I mentioned above covered the interview questions.
The process is pretty standard:
4. Negotiation
1. Call with recruiter
On a call with a recruiter, you discuss general questions, learn more about the company and the team you are interviewing. They ask about your work permit. In conversation, they ask about your experience and check your English. They find out what stage of your job search you are at and can build on this, for example, to speed up your interview process (In Aurora, I said that I completed all my interviews and if we can quickly go through all the stages, I agree. As a result, all the stages were done to me in 4 days, and onsite in just 3 rounds).
Calls often happen before you have sent your CV. Only if everything went well and there is a match, you will be asked to send your CV. They may ask about your salary expectations, but I answered truthfully that I have no idea how much I am worth on the market since I just arrived. This was enough for them to pass over the question. You can ask for all the information you need in the same call, including the technical stack of the team. If you have questions that are important to you, this is the time to ask them. For me, it was the terms for the green card and the tech stack.
Recruiters respect your time, so you coordinate each call according to the calendar, choosing from the recruiter’s one, or recruiter can choose from your calendar.
Do not specify your salary expectations in any case, if they are very demanding (it has only happened once), specify a wide range. Turo’s recruiter repeatedly asked me what I expect, and when I gave him the range he said our compensation was 2 times less and we wouldn’t be able to match.
2. Technical screening
So you have passed the first stage and you have been assigned a technical screening. Usually, it is 45 minutes. On it, again, you will tell a little about yourself, you will be asked questions about your experience and will be given to solve some small problem (in 90% it will either make a small widget in JS and a framework, or an easy problem for algorithms, or rather data structures that is in JS). Occasionally, there were problems on Hackerrank with HTML, CSS, and JS, 2–3. These are fairly simple to solve. Sometimes you can use any editor of your choice. But most of the time I send a link to my online editor (even with code highlighting).
The most important thing is not to be silent, to think out loud so that the interviewer follows your thoughts.
Related to code execution, it’s 50/50, sometimes you need to run the code when you want and as much as you want, sometimes I don’t even need to run the code (there’s not even such a possibility).
There was one time when I was asked to design an elevator system at a technical screening (without code), it didn’t end well :)
3. Onsite(virtual) interview
The most difficult stage of the interview, as it duration 3–6 hours. Many companies allow you to split it into 2 days, this is up to you.
It consists of coding, system design, and behavioral interview.
You can ask the recruiter about each round of onsite to understand what to expect from them.
Coding rounds are similar to technical screening: find out the requirements, discuss the solution, code, and test it.
System design
Always focused on front-end issues, no need to talk about highly loaded systems, databases, etc. You just need to describe some functionality in the browser, ways to optimize, customize and expand, describe how to transfer data to the server, how to store it, where to store it, and why. Sometimes you need to design several endpoints with request and response structures. Don’t forget accessibility, it’s very important!
Behavioral interview
Here you can expect questions about your experience, projects, and teamwork. Basically, these questions are “Tell me a situation when you ..”
In general, the questions asked about the most challenging project, the conflict in the team, what we did when deadlines were approaching and we didn’t have time, and what our biggest failure was.
All stories should be told according to the STAR (situation — task — action — result) methodology. The story shouldn’t be very long. You will be asked clarifying questions if you didn’t explain something or the interviewer misunderstood you.
In most cases, the hiring managers conduct the interviews. In the end, this is a great opportunity for you to ask all your questions about the team and the product.
Negotiation
There is no less stressful or important stage. It took me almost a month. With some companies, there were even several rounds, on average, I raised offers for 70–100k. Ask for feedback about you to better understand how good you were and use it as a negotiation tool. But nothing works better than a counteroffer. But it is important not to go too far, look at the compensations on the levels.fyi website beforehand in order to understand the range.
In all companies recruiters do a very good job and support you every step of the way, tell you what to expect in each round, how to prepare, and tell you what the interview process looks like in general.
Amazon: I had the worst interview ever. At all rounds I had problems in understanding what the interviewer wanted from me, I clarified the requirements most of the time and explained my solution because for some reason they couldn’t understand it. And when they started asking questions about JavaScript during the coding process, it turned out that they didn’t know it and had to spend more time explaining why I use it and how it works. As a result, there were 5–7 minutes left for coding, but this was enough to finish. In the last round, I got the hard problem with trees, that I didn’t fully solve.
Microsoft: Some of the interviewers again didn’t know JavaScript, only asked algorithmic problems and asked questions about how JavaScript works. It was more like an interview for a full-stack position.
Zoox: Only math problems and algorithms were asked.
Aurora: Again, only algorithms were asked, although the position is pure Front-End. However, my friend’s interview focused only on front-end questions.
Meta: I didn’t expect so much attention from this company. I had a lot of calls with a recruiter, the duration of some was an hour, where he told everything in detail about the interview process, gave preparation materials, asked how the preparation was going and gave advice, including how to behave in an interview, what to ask, what better not to ask. The questions were on the frontend focus. After the onsite, the hiring freeze started right away…
LinkedIn: They have an Ember.js framework, so questions are only about pure JavaScript and the frontend.
Apple: Lost my feedback after the technical screening. Still searching.
Google: The interview process was with front-end focus. After getting approval from the Google Hairing Committee, your next step is team matching. I had mixed feedback between L5 and L4 levels. As a result, the committee gave me L4 without additional interview stages. Only after a successful team match, they will send you an offer with numbers, but how long this process can take depends on many factors.
I had 2 team calls a week, although I could do every day. The process took 2 weeks.
The criteria by which I compared the teams:
Team size. Frontend, backend, infrastructure engineers.
Tech stack (all Angular).
Promotion to L5 (time and opportunity).
Product.
Responsibilities.
Front end or full stack position. There was even a backend only.
Development process.
Who are the users of the product, how many. Perhaps this is an internal project or a large one for a large number of users.
Evaluated how comfortable communicate with the manager or team leader for me.
As a result, I matched with the Google Analytics team, which is responsible for the performance of this product. In this team, I saw many opportunities for growth and metrics for promotion.
I compared offers and decided which one to accept according to the following criteria.
Product. It is very important that the product is of interest to you. I have many years of experience in developing streaming platforms and know the needs of users and developers. I can learn a lot and see many challenges for myself in such products. Roku gives me this opportunity.
Tech stack and tools. I don't like Angular, I prefer React.js. This was one of the most important reasons why I chose Roku.
Work-life balance. This is a very important thing. I don't want to burn out. During the interview process, you can ask questions about it and listen carefully to the answers.
Opportunities for growth. Growth in technical terms and within the company to the lead position (Staff)
Position level. After the position of engineering manager, I was not ready for middle positions (yes, there were those too).
Total compensation. Base and stock. Roku pays 85% in cash for senior positions, which is more profitable for me, as a beginner in this country, since at this stage money is needed here and now.
Green Card Process. Some companies start the green card process from the 1st working day, some after 3, 6, 12 months. I filtered companies based on 1 day and 3 months. But as it turned out, these terms can also be negotiated, I was able to negotiate from 3 months to 1 working day. An important nuance, Meta does not issue green cards, I asked them about it at every call, at every stage of the interview, but I never received an answer, no one at all. But according to information on the Internet, everything is bad with them.
Team size and responsibilities. I don't like working in a team where you are one Front End engineer, or even 2. I want to grow and learn. The level of engineers in the team was also important for me.
Remote work or office work. I prefer office work. Working from home is not comfortable for me. Some companies now offer to work 3 days in the office, 2 days remotely, and some offer full remote work.
Office location. I live in San Jose and some companies have offices in San Francisco. It will take you at least 1.5 hours to drive here. Do you want to spend 3 hours a day on this?
Do not schedule more than 3 (but preferably 2) onsites per week. Last week I had 4 onsites in a week and it was hell! But I got 2 offers :)
In an interview, your skills grow exponentially, so do not immediately pass the interview with the company of your dreams.
After the interview you can talk to someone, it helps to relax.
Do work on the mistakes after each interview to understand what could have gone wrong, look for answers to questions and tasks that were in the interview and try to figure it out.
Prepare the text for your self-presentation for 1–1.5 minutes, you will tell it at each stage of the interview.
For a behavioral interview, prepare and practice as many STAR stories as you can, I had about 20 that covered almost all questions. It took about a month to prepare them.
Buy a paid subscription to Calendly (or a similar service) to make it easier to manage your interviews. Sending the dates in an email means they can respond within a week, and demand 5 dates (respectively), so these 5 days are blocked for you and you cannot schedule other interviews on them.
If you have any questions or topics that I have not covered, ask in the comments here or on my telegram channel!