Technical interviews are a nerve wracking experience that can demoralize a developer. In the past, these consisted of weird brain churning questions where you had to calculate how many golf balls can fit in a school bus. Thankfully, we don't have to answer these anymore. But to this day, the interview process has candidates solve unrealistic problems, with at least one other pair of eyes judging your every move, in at least 15 minutes.
A little about me, I graduated with a bachelor's degree in computer science. It was the hardest experience ever and I even grew some gray hairs. However, I was fortunate enough to have found an amazing group of friends where we regularly studied together in the computer lab until dawn, with our minds blank, our eyes dry and our bellies full of fast food.
- Year: 2017
- Position: Front-end Developer
My first blunder. I haven't done a coding assessment before. I attempted my first one through an online platform that recorded you through your webcam. I received two questions, one was similar to FizzBuzz. FIZZBUZZ! I didn't know how to solve it. I swear. I was a mess on that keyboard. I had no idea how to solve that question fully. I gave up, submitted whatever I had and went to my next class.
What I learned:
Although I was humiliated to fail FizzBuzz, I realized this was only my first coding assessment and definitely not my last. I was going to take Leetcode more seriously and keep applying to more companies in order to gain more exposure to the interview process.
- Year: 2017
- Position: Front-end Engineer
I was asked some front end questions like: Explain AJAX and what does Asynchronous mean. There were also a couple of Leetcode easy questions. I didn't have any prior front end experience so I didn't know how to answer the specific front end questions, nor did I expect them.
What I learned:
In addition to Leetcode, I needed to study for the specific role I wanted to go for. I started searching up typical front-end interview questions as well as practicing my skills by creating side projects.
- Year: 2017
- Position: Engineering Residency program
The first round included two technical phone interviews. The interviewer called me on my phone and sent me a google doc link. He also pastes the coding question on the doc and I dove right into trying to solve the problem. Then I became confused. I asked him questions about what's a valid input and what isn't. Then I got more confused and he spent a lot of time trying to explain. Then I told him, I didn't want to continue the interview further. There was sympathy in his voice as he tried one more time to get me to understand the problem but I was firm and we hung up.
I cried until it was time for the next interview. The person was calling my phone and I refused to answer. They left a couple of missed calls and then my recruiter immediately tries to contact me and asked if I was still joining. I didn't answer her either.
I ghosted Google.
Google, if you're reading this I'm sorry. I've grown since then.
What I learned:
- I had a friend pick a random problem off Leetcode and I had to solve it on a video call while sharing my screen.
- I had recruited classmates to join me in white boarding the coding problems we encountered during our interviews in the library.
- I had organized a study group every weekend where we tackled data structures and algorithms together and solved Leetcode problems together.
I put in the effort to practice more and more, no matter how grueling it was. I forced myself to be put on the spot more, to get used to this uncomfortable feeling and become more confident.
- Year: 2019
- Position: Software development engineer
I passed the first round interview, which was a mix of behavioral and technical, and then proceeded to the final round. This was at a conference where I had two in-person interviews. The first one, I believe I did great for the behavioral questions where I talked about my past projects that were listed on my resume. Then he hit me with a system design question. W H A T. I didn't know how to solve it but I tried anyway. Didn't solve it correctly and the interviewer showed me the correct flow at the end. When it was time for me to ask questions, I asked him for something that stuck out to him that I should improve on. He said that I need to learn how to say I don't know if I didn't know how to solve a question... Point taken.
What I learned:
I accepted the fact that I needed to say "I don't know" in the interview. But I couldn't just leave it like that. I honed my answer to be something like "Honestly, I don't know, but if I were to guess, I think ..." I like to believe this answer instead has a better impact.
- Year: 2020
- Position: Full stack engineer
I was getting ghosted a lot this year, it was tough to get any company interested due to the pandemic. I was pretty happy to get someone to invite me for a first round coding interview.
This was conducted over BlueJeans and I was sent a Coderpad link. I've done a good amount of studying at this point but was still nervous because of the competitive reputation of this company. I was asked a question regarding calculating taxes. The majority of the time, the interviewer had to explain to me the MATH behind taxes. I DON'T KNOW WHY I COULDN'T MATH. It just wasn't sticking. Because I couldn't math, I couldn't come up with a working solution and then time ran out.
What I learned
- The UMPIRE Interview strategy. I needed to know exactly how to approach a technical interview. After learning and practicing this strategy, I felt more confident on understanding the problem and solving it and pretty sure this impressed my future interviewers as well.
When I received the email that started out saying "Congratulations! We're pleased to offer you the position of Software engineer", I felt this burden drop from my shoulders. The constant Leetcoding, the burnouts, the vast amount of time on submitting applications, networking and still contributing to my side projects were finally done. (Maybe more like put on pause)
I promise it gets better. Utilize your community, uplift one another, and remember the reason(s) why you're striving for success.
- Interview constantly. Interview with companies you don't care about.
- Immediately after the interview, write down everything you've been asked. Redo the coding problems given to you. Go over what you've done and figure out what you could have done better.
- Practice solving the questions under pressure e.g. timed, having someone watch you, think of ways to optimize the algorithm right then and there, etc.
- Utilize the Pomodoro technique. Learning this technique helped me take my Data structure and algorithm studying seriously. I stayed alert and focused and was able to increase my completed questions on Leetcode from 50 to 100.
- If you're financially able to, invest in Leetcode Premium. It helped to see the solution when I was stuck on a problem.
- Depending on what software engineering role you're going for, you'd need to study for the position as well. For example, front end roles will ask you about AJAX, the DOM tree, etc and iOS roles would ask you questions about Swift and Objective C.
- Cracking the Coding Interview
- The Pomodoro Technique by Francesco Cirillo
- The Standout Developer
- How to Prepare for a Software Developer Interview
- The Ultimate Strategy to Preparing for the Coding Interview
- Tech Dev Guide With Google
- CodePath's Computer Science Guides
- Tech Interview Handbook