Changing job on a Visa
Preparing for software engineering interviews and navigating the visa transfer process
tldr;
Interviewing requires preparation which is hard to manage with the job.
If you are on an H1B visa and your spouse has a dependent visa (H4 + EAD), then plan for delays in visa transfer process. Specially for the dependent visa.
A lot of recommended resources for System Design lack depth. They do not talk about alternate approaches, trade-offs, failure modes, and scalability.
All companies have a standard interviewing process. There is rarely any surprise during the interviews.
You can negotiate offers. You are in a better position if you have multiple offers.
Interviewing from home provides flexibility. You can spread the interviews across 2-3 days.
Introduction
In March, I left my job as a Software Engineer at Amazon. This was my first full-time job and I spent 7 years there. The urge to leave built over time. I was feeling bored and on top of that, I was not growing. Then I read about the Great Resignation where people left jobs for better opportunities. Some of my friends did the same. This was unusual because my friends are on a visa, and they avoid job changes due to Visa related hassles. Talking to them gave me an idea of how good the market looked. This was exactly the nudge I needed to move my lazy ass in search of a new job.
This blog is a reflection on how things went with my job search.
But First, My Visa Situation
Let us do a quick primer on the H1B visa before we look at my visa situation.
H1B visas are non-immigrant visas given to “skilled” labor. It is issued for 3 years but can be extended if you meet certain conditions. H1B visa is tied to an employer. If you change employers, then you also need to update the visa. For this, you file a request with USCIS. This is approved within a month. USCIS is a government agency for immigration.
H1B visa holder’s spouse gets an H4 visa and can apply for work authorization. Work authorization approval is a prolonged process that takes between 6 to 12 months.
Now let us look at my situation. I am on an H1-B visa and my wife is on an H4 visa. At the time, she had work authorization and was employed. Our visas were valid till May 2022, and we were eligible for visa renewal. Amazon applied for our visa renewals in Nov 2021 (6 months before the expiry date). My renewal got approved in 10 days but, my wife's H4 and work authorization renewal could take a year.
Our concern was - What happens to my wife's work authorization application if I switch jobs? Will USCIS reject her application? Should we file a new application for her after my job changes? Delay due to filing a new application will cause her to lose her work authorization.
We talked to lawyers and searched the internet for answers. Everyone said: “Application should get approved.” Nobody was certain though. Erroring on the side of optimism, we decided to go ahead with the job search. We also decided to back out from the process or delay joining if we met with any issues.
The Preparation
I started preparation by focusing on coding. Interviews require solving coding challenges. Engineers do not solve these challenges on the job; hence there is a need for prepration.
I brushed up on data structure and algorithms knowledge from MIT Course Notes [1]. Then I started practicing problems on LeetCode. It has coding challenges where you submit your solutions to verify them. I solved their Most Liked Questions [2] and Top Interview Questions [3] problem lists.
After coding my next focus was on System Design. This is where I had the most fun. I found recommendations for resources like - Educative.io [4] and YouTube Playlist [5] on the internet. But they were not comprehensive. They did not talk about alternate approaches, trade-offs, failure modes, and scalability. I wanted to develop a deeper understanding. Then I found Alex Wu’s System Design book [6]. It had the details and it also linked sources at the end of each chapter. I also went through the engineering blogs by the companies [7] to understand their architecture and, watched their talks on YouTube [8].
I found another great resource in the Principal of Amazon talks. Here Principal Engineers talk about the problems they have solved. I watched them to learn about the architectures of services like - DynamoDB, S3, and SQS. Unfortunately, only Amazon employees can access this resource.
The last step in preparation was for a behavioral interview. This was easy because I had been in scenarios that companies ask about. I practiced by explaining scenarios to my wife. She helped me simplify the explanations so that people without context could understand.
Before the actual interviews, I decided to do some mock interviews on interviewing.io. I had never interviewed in my 7 years at Amazon. So, I thought mock interviews will give me quick feedback. I only did 2 System Design mock interviews as I was confident in my coding. Mock interviews helped me understand what interviews look for. This helped me understand the flow of a system design interview.
Finding time for preparation along with office work was hard. I woke up early to code and used evenings to learn system design. I watched Principles of Amazon talks during lunch or on a slow day at work.
Hello Recruiters!
Feeling confident with my preparation, I prepared a list of companies where I wanted to work. I started with some big names and some products I liked. I used Blind and Glassdoor to understand the company culture. I came up with a list of 7 companies.
After this, I updated my resume and LinkedIn profile. I applied for roles on the company's job portal and reached out to recruiters on LinkedIn. The response was encouraging. Hence I applied to more companies than my list.
Next, I set up intro calls with the recruiters. In the intro calls, recruiters asked about my experience and why I was looking for a change. I tried to understand if the role was a match for me. I did not go deep into company culture and team details on these calls.
Recruiters always inquired about my visa situation. The usual questions were - How many years do I have on my Visa? Do I have my i140 approved? (you need i140 to extend the visa). Before scheduling my interviews they also verified my visa status.
Some recruiters ghosted me and never got back after the first call. I did not waste time on the follow-ups as I already had good interest from other companies.
Main Act - The Interviews
After a month of preparation, now it was time to take the field. I planned to schedule all my phone screens together. But I had to make an unplanned trip to India and recruiters were unable to schedule interviews on my preferred dates. As a result, phone screen interviews were spread out over 3 weeks.
All the phone screen interviews followed a standard script. A few minutes on my experience followed by a coding question, and then time for me to ask questions. I did well on most phone screens, but I failed a few.
I did phone screens with 8 companies and got rejected by 3. I knew a few rejections would happen, so I did not take them too seriously.
For full loop interviews, every company had a similar process. There were 4 to 5 interview rounds. 2 for Coding, 1 for System Design, and 1 for behavioral. Some companies also had 1 round on past System Design work.
All the coding rounds had leetcode-ish questions. To pass these interviews, I must clarify all the requirements. Then write and debug the code.
In the system design round, interviewers asked me to design services like Instagram, Dropbox, or Web Scraper. Sometimes, they asked me to design systems for problems that their team was solving.
In the Behavioral round, interviewers asked me questions to prove that - I am a team player, can deal with conflicts, and can show leadership.
Working from home gave me the benefit of not doing all the interviews on a single day. I always split my interviews across 2 days. I never did more than 3 on a single day, hence I never took a full day off for an interview.
Final Act - Offers and Negotiations
While I was waiting for the results, I started reading about negotiating offers. I read articles and watched YouTube videos to learn this art.
After months of preparation and weeks of interviewing it was time to reap the rewards. Fortunately, I received multiple offers that made negotiations easy. I also had conversations with the hiring managers to understand more about the team culture and problem space.
Every manager is a salesperson at this stage. There is a limit to how much you can learn as an outsider. I looked up managers and team members on LinkedIn to gather more info. Sometimes, I found mutual connections who gave unbiased opinions.
After all this process I decided to join Meta.
Oops, one more step - The Visa Transfer
After signing the offer, it was time to deal with USCIS. Lawyers from Meta reached out. They asked me to fill out a questionnaire and provide documents like my passport, i-94, and current visa. It took about 2 weeks to file my visa transfer request with USCIS and 2 more weeks for my request to get approved.
Meta's lawyers mentioned that my wife's earlier work authorization request should get approved. But they suggested filing another one, in case the earlier one gets rejected.
After I received the letter approving my visa transfer, I put in my notice. To our surprise, my wife's earlier H4 application and work authorization got approved within 3 months! I received her approval letter the day after I left Amazon. Talk about timing it!
Appendix
MIT Lecture Notes: https://shorturl.at/mpEK5
LeetCode Most Liked Questions: https://leetcode.com/problemset/all/?listId=79h8rn6&page=1
LeetCode Top Interview Questions: https://leetcode.com/problemset/all/?page=1&listId=wpwgkgt
Educative.io System Design: https://www.educative.io/courses/grokking-the-system-design-interview
YouTube Playlist: https://shorturl.at/bvAHK
Alex Wu’s Books:
Engineering Blogs: https://github.com/crispgm/awesome-engineering-blogs
YouTube Channels:
InfoQ: https://www.youtube.com/nctv
GOTO Conferences: https://www.youtube.com/c/GotoConferences