The one with technical interview
Act 1
Zhao is about to graduate from college with a degree in computer science from a top engineering university. He scored a bunch of interviews from well-known companies, and he set out to interview. It went well and he got hired at SimpleDeliver, a food delivery company in Chicago.
The computer lab is quite, with a strong mixed smell of pizza, body odor, and god knows what. As he walks through the lab, Zhao could see traces of Cheetos on the floor. It is Sunday night, a week before final’s week at University of Illinois Urbana Champagne , for computer science or computer engineering students, final projects for the semester might be due during this time, so it’s not surprising to see all these mess in the lab.
Zhao sat down at an empty seat in front of a computer, he has finished his project early for one of his classes, and he planned to do something else here. As a graduating senior, Zhao is looking for a job as an software engineer post graduation. In addition, Zhao came to study in college from China and as an international student, he needs to find an employer who sponsors work visa and is willing to hire him.
Just three weeks earlier, Zhao entered engineering career fair to meet potential employers. Many big tech companies are at the career fair, as well as some fast growing, private companies. The career fair itself is mixed with friendly recruiters and interesting freebies that attract students to their tables. At Lyft table, recruiters are handing out free pink water bottles. And at another table for a security firm, they put students’ names into a raffle to win a free iPad. Zhao wondered around the career fair intently, intrigued but undistracted by the freebies. He had one burning mission in his heart - find his first engineering job. After a few rounds, he decided to talk to three different companies: Facebook, Uber, and another private growing company called SimpleDeliver. The lines of both Facebook and Uber are super long - many students are using their products, and are eager to be part of building their products. Relatively, the line for SimpleDeliver is small, so Zhao waited in line to talk to the recruiter. When it was his turn, Zhao came up to the table, a Chinese guy of his age greeted him.
“Hi I’m Zhao, nice to meet you.” Zhao said, shaking his hand.
“Hi I’m Li Sun, nice to meet you too.” The guy nodded, then continued on to speak in Chinese, “Are you from China?”
“Yes!” Zhao replied in Chinese, with excitement, “Are you?”
“Haha yes, I’m from Beijing.” Li Sun replied, “what about you?”
“Suzhou.. It’s nice to meet someone from China here.” Zhao felt comfort by speaking with Li Sun. Even though Urbana Champagne is a big engineering school that has a lot of international students, Zhao didn’t have a lot of friends from China. He prefers to be alone and study computer programming by himself.
Li Sun and Zhao continued to chat and got to know each other. Li Sun also graduated from Urbana Champagne four years ago and worked in Chicago. Later he went on to co-found SimpleDeliver with another college friend. Li Sun is now CTO of SimpleDeliver and company has been growing a lot - they just raised series B funding and is looking for doubling their engineering resources. Zhao was very impressed with Li Sun’s journey, and the fact that CTO himself came to campus and recruit.
“Comparing to many other companies, we are still very scrappy and having fun. We care about getting things done. To me, recruiting top talent is important and I had wonderful memories at this school, so I got excuses to visit the campus.” Li Sun chuckled a little, “So Zhao, tell me a little about yourself, what’s your background?”
Zhao told Li Sun a bit more about himself - he’s senior double majored in computer science and mathematics, with a 3.87 GPA. He worked at the research lab in the computer science department doing research about distributed systems, and he’s now looking for an engineering job that sponsors work visa. Li Sun seemed to be happy to hear about Zhao’s background. “You should come interview with us.” Li Sun said right after Zhao introduced himself, handing him a business card, “We are based in Chicago so it’s only a train ride away, shoot me an email and we will schedule something.”
Zhao was happy after his encounter with Li Sun at SimpleDeliver’s table. He also waited in line for Facebook and Uber, each took about an hour, and the recruiters were more transactional and much less personal. In his heart, Zhao wished that it can work out with SimpleDeliver.
After the career fair, he looked up SimpleDeliver in Crunchbase. He’s happy to learn that SimpleDeliver is growing fast and recently closed a series B of $50 million dollars. A startup with stable funding, Zhao thought. In addition, Zhao is happy that one of leaders is a Chinese native and he felt that it can him adapt to the culture more easily. Later that day, Zhao sent an email to Li Sun thanking him for the conversation, within 2 hours, to Zhao’s surprise, Li Sun responded, and the interview is scheduled to be in 3 weeks.
3 weeks leading up to that interview, Zhao is trying his best to prepare for his interview. A good thing is that he has been taking computer science classes so writing code under a tight timeline feels nature still. He went online to search for interview tips, and found a few coding exercises such as creating a binary search tree, nothing too surprise for Zhao there. Nevertheless, he set up 1 to 2 hours at computer lab each day practicing interview questions he found online.
Zhao arrived in the office of SimpleDeliver early that morning, it’s a factory warehouse converted into an open office space. There are art drawing of different types of food on the wall, people seemed happy around there and chatting. At the reception, Zhao was greeted by an engineer Gaby, who showed him around the office before let him into a conference room. “We will be here for our interview today.” She said with a smile, “Good luck!”
The interview was a long but decent experience for Zhao. They had three sessions in total, one session focused on programming, where the engineers asked Zhao to create a program that counts the number of words in a large text, it’s a simple hash program and Zhao has programmed it before in school, after a few debugging he was able to create a Python program to do that. Another session focused on solving a technical problem using white boarding, and the engineers asked Zhao to create cloud file sharing application like Dropbox, he was confused at first and got a little nervous, then he proceeded to draw out database tables to store files on S3, and the engineers started to ask questions based on Zhao’s answers. At the end of that session, Zhao felt like they didn’t solve the entire problem but had a good amount of discussion. The last session Zhao chatted again with Li Sun, who asked him more questions about his past research experience, and what he would like to learn after graduation.
The whole three sessions went on for three hours, with one hour for each session. Zhao was exhausted after it, but he felt like he did his best. The day after the interview, the recruiter called Zhao and told him that SimpleDeliver is going to extend him an offer. Zhao was ecstatic, he knew that he made his first step towards tech industry, and as an international student, he made his first solid step to be independent in America. He is looking forward to living in a big city like Chicago and start his new life as an engineer.
Act 2
Fast forward two years, Zhao is a mid level engineer at SimpleDeliver, and he is itching to move to a new place, maybe a west-coast tech company and make a lot of money. He started to interview at Facebook, only to get rejected at technical phone screen. He then interviewed at a smaller company FreshChef, a meal prep company, only to get rejected after an onsite. Zhao started to doubt his interview ability.
Two years have passed since Zhao joined SimpleDeliver. Zhao has been accustomed to the workflow of SimpleDeliver and knows the work of his team well - from developing feature to merging things to master. However, since about 6 months ago, Zhao started to have an itching feeling that there might be something better out there - he heard from some of his friends that are in SF saying that tech is booming there. In addition, Zhao keeps wondering if the way SimpleDeliver does things is the best way to do things. After all, this is his first engineering job out of college, Zhao still want to see a lot more different things.
Lately after work, Zhao has been studying for technical interviews. On LinkedIn, recruiters are constantly reaching out for engineering talents and Zhao is sure that he can get an interview somewhere if he wanted - SimpleDeliver is also a somewhat known company and its name helps Zhao get initial round of interviews. Because he’s still working full time, Zhao wants to keep the number of companies to interview small. He finally settled on two companies - a big, well-known company called Facebook, and a smaller but fast growing company called FreshChef.
The first interview was with Facebook. Zhao is interested in joining because it’s a well-known technology company. Besides, it’s in California and at the heart of Silicon Valley. Zhao has been fantasized about “making it big in tech” - join a tech company with an impressive compensation, and live in the sunny weather all year around. The Chicago weather has let Zhao down lately.
The Facebook interview was conducted on a shared coding program called coder pad, and the interviewer is Chinese woman named Fan. Without much introduction, Fan directly dived into the problem - write a balanced tree, and which node of the tree stores a number. Zhao felt a bit stumped on this request, although he learned that data structure in college, it has been two years since he graduated and he doesn’t have to write anything data structure related at work. Nevertheless, Zhao collected his cool and started dive into the details. He learned from interview prep that it’s important to verbalize his thoughts, so while he’s typing out his answers, he will talk out loud what he’s thinking. After 10 minutes, Zhao has something basic written out in Ruby, with tests, but in his gut he didn’t feel too good about his progress.
“Now let’s do another task,” Fan instructed after Zhao said he is good with the basic set up. She didn’t give any feedback on the quality of Zhao’s code and in Zhao’s gut something is off. “Now let’s sum up each level of the tree, and print out the value.”
Zhao really struggled at this task. He knew that the time is running out and he desperately wanted to solve all the problem. In addition, he didn’t write tests to check his program, so the only way to check his solution is by manually running the program and check the output, which isn’t reliable sometimes. Zhao got increasingly nervous as he continued to solve the problem, by the end of the time (45 minutes), Zhao only got a partial solution for Fan’s ask. After the phone interview, Zhao got a sinking feeling that he didn’t pass it. Not surprisingly, the next day Zhao received an email from the Facebook recruiter saying that they decided not to continue his technical interview process.
Zhao spent the rest of the week feeling down. SimpleDeliver is a well-known company although not well operated, and he thought that he had a decent chance of getting passed Facebook’s interview. He started to double his ability as an engineer, if he is learning enough at SimpleDeliver, which in turn inspired him to look further for a new tech company.
He cheered up later and continued his effort on FreshChef. After the initial phone call with the recruiter, Zhao felt pretty good about the culture at FreshChef - young, fresh, and collaborative. The next day, Zhao received an email from the recruiter requesting him to finish a take home project, it’s a small project that requires processing a small file that contains a few dishes with ingredients, and then output a result of food inventory to buy. Quite fitting for a food company, Zhao thought.
Zhao then spent two nights after work to finish the project. Ruby is the language he uses at work so he chose to use it to build out the program. He saw in the requirements that tests are strongly encouraged, so he also spent time trying to identify edges and wrote a few tests to cover them. By Thursday that evening, Zhao wrapped up his program and sent out his assignment. On Friday afternoon, the recruiter came back informing him that FreshChef would like to continue on an on-site interview in Brooklyn, New York. Zhao was thrilled. This is first time after graduation that scored an onsite interview. Even better, he get to travel to a brand new location!
Two weeks later, Zhao flew to Brooklyn a day before interview and settled in Brooklyn downtown. He spent the night wandering around Brooklyn and got a good hippie vibe of the city. There are wall arts everywhere, and when Zhao approached close to the Brooklyn bridge, he was in awe of its beauty. The Brooklyn nights with the bridge seemed peaceful and exciting at the same time. Zhao went back to the hotel after the walk, and he didn’t go through any coding exercise, but praying that he can do his best during the on-site interview.
Zhao arrived at the office of FreshChef early. The office was also close to Brooklyn bridge and have a homie, hippie feel. Dan, the director of engineering greeted him at the door, Dan is very friendly and asked Zhao how his trip is, and showed him around the office. He led Zhao into a conference room and informed that the interview will be conducted in this room.
The first session is reviewing his take home project. An engineer Jeff greeted Zhao and asked him to explain his approach for solving the problem. Zhao felt that it was a good session because he was able to walk through his code and explain how the code is structured. Jeff seemed happy through the session and in the end thanked Zhao for teaching him things about Ruby that he didn’t know about.
The next session is coding, the one which Zhao’s mostly nervous about, and it didn’t go as well, as Zhao expected. Zhao was tasked to build a webpage with JavaScript, however at SimpleDeliver Zhao mostly worked with server technology using Ruby, and his experience with JavaScript was only through projects during his spare time. Nevertheless, he tried his best to solve the problem and made a few mistakes, like not importing JavaScript dependencies properly. Zhao ended the session feeling that he might have blew it up.
The last session is about culture, which Zhao feels comfortable about. He has read a few blog articles on the culture session, and he expected questions like “what’s one thing that is challenging at your current job”, “walk me through a technical project you’re working on”, and “how does your team solve the challenge”, etc. During the session, Zhao was clear that he’s looking for more technical challenge and growth for his next role, which aligns with his own motivation as well as FreshChef’s expectation as a fast growing startup.
“Well, at least two out of the three sessions went well.” Zhao thought to himself, after finishing his whole day of onsite interview at FreshChef. The whole day went passed really quickly and the whole thing seems to be a blur. Zhao was exhausted and starving. He found a Chinese restaurant nearby, ordered a takeout, came back to the hotel, ate it fast and soon passed out.
Zhao flew back to Chicago the next day and anxiously wait for the results. He couldn’t quite concentrate at work and found himself constantly checking his personal email address. Two days passed by and in the morning Zhao finally got an email from FreshChef, Zhao glanced at the first line of the email “Thank you for interviewing with FreshChef, but..”, and he knew then that he didn’t pass the interview. The email went on saying that the decision was a really tough one and the team has split opinions about his results, but in the end, the team didn’t feel completely confident and excited to bring him on as a full time engineer.
Zhao finished reading the email feeling frustrated and angry. In his heart he felt something jolted. After two rejections, Zhao started to seriously look at coding interview, and he’s determined that he will succeed in technical interviews.
Act 3
Determined to crack the coding interview, Zhao started to study for technical interviews. He came across a blog post that motivated him to master technical interviews. After 3 months, Zhao tried to interview again with WePayment, an online payment company, and finally got a new offer.
Zhao spent the next two weeks feeling discouraged. Having two companies reject him in a row made him question his qualification as a software engineer. He started to wonder if he’s cut out to do computer programming, and if what he learnt at SimpleDeliver is enough. Zhao found himself with all those frustrating feeling, he also look back at his journey since college - moved from China to go to college in the U.S., started his life in Chicago by getting a job at SimpleDeliver, and he worked under a student visa. Zhao knew that he really needed to work hard in order to make a living, and cracking this technical interview is no exception.
To clear his head, he worked out a bit longer at the gym each day. The adrenaline out of physical exercise boosted Zhao’s moods, and slowly he found himself regain his confidence and hope. He’s determined to prepare better, and get over his own fear of coding interviews.
Zhao started to research how to crack technical interviews. He found the website Leetcode that help people practice technical interview questions. In addition, he came across a blog post written by a software engineer Han at Airbnb, about his experience of successfully interviewing at five top tech companies in five days. It’s an eye-opening for Zhao because he never thought someone to go on five technical interviews in a row and succeed in all of them, and Zhao got inspired even further knowing the author is also Chinese, and also a father. In the blogpost, one thing that really stuck with Zhao is Han’s suggestion on practicing technical questions - practice, A LOT, there’s no way around it. Han described that during interview preparation, he would put his kids to sleep at 8pm, and then practice interview questions until mid night, then go to work the next day, and then repeat, for two months straight. It’s the discipline and determination that lead to consistent and deliberate practice, and it’s that deliberate practice that leads to goal achievement.
Inspired by that blogpost, Zhao set out to draft his plan for practicing technical interviews. He now practiced on Leetcode every day and aim to solve two technical problems a day. At first, he aimed to solve easy problems without any time constraints, after about 3 days he got comfortable solving them and moved on to solve medium level problems, after about 2 weeks Zhao felt comfortable with that, and he started to solve hard problems. Some hard problems took Zhao multiple days to solve, but he felt good about thinking in concrete problems and being able to solve them.
Slowly Zhao realized that his confidence about coding interview rise. Solving specific coding challenge in an interview requires different “muscle memory” from what he learned at work. Coding in an interview is under a specific time constraint, and under the fact that the code is being judged by another person. While at work, engineers can take time to think through a problem, collaborate with others, and have code reviews to ensure software quality as a team.
Zhao also looked into common technical design problems - a big problem in which a candidate is asked to design a solution on a whiteboard. After reading bunch of blog posts, he started to realize that it’s more important to communicate clearly on the solution rather than aiming to solve the problem itself - understand product requirements by asking technical questions, verbalize out lout his thoughts on solution, and provide solutions while weighing trade-offs. Zhao picked a few design questions and record himself on the phone as if he is in an interview, and then watch the recording and analyze what he can do better.
Zhao continued to practice for two months. In some ways he felt productive in growing himself as an engineer because the things he practiced is different from what he learned at work. He solved the coding challenges at a faster pace now, and started to get a good idea how to perform best during a coding interview. He felt ready again for technical interviews. This time he applied for a Chicago-based tech company called WePayment. He applied the job on the website and heard back from the recruiter the next day. Software engineer is in high demand and every company is looking for qualified candidates.
Similar to FreshChef, Zhao received a take home project from WePayment. It is to build simple accounting ledger based on a file of transactions. Zhao felt ready this time - he spent the night finishing the project - start from high level coding structure, then outline the tests he want to write, and then fill in the gap of actual code and tests. He submitted the test in the morning, and every smoothly, he heard back from WePayment two days later, saying that they are interested in bringing him onsite.
Before the onsite day, Zhao started to focus on maintaining his mentality for interview. He told himself that rather than being nervous about if he gets the right answer, he will redirect his attention on having fun solving the problem. Instead of thinking the interviewers as someone who’s judging him, he will view interviewers as a future coworker who he will get to work with. Everyone feels nervous about interviews, rather it’s how we channel that nervous into some productive energy that distinguish success interviews.
On the day of the onsite interview, Zhao worked out in the gym and had a big nutritious breakfast to prepare himself physically. The sessions at WePayment are long but familiar. White boarding a design problem, coding using his submitted project to build more features, and lunch to get to know people at the company. The whole day went in blur for Zhao because he was so zoomed in for the interview and the time went passed by quickly. He left WePayment feeling tired but satisfied, he didn’t feel that he got too nervous during the interview and the fact that everything went by really fast is a good sign. The next day the recruiter sent a follow-up email informing Zhao that WePayment is going to extend an offer.
Zhao smiled when he saw the email. He knew that he has cracked the code for technical interview - turn frustration into motivation, and practice A LOT.