How to Prepare for Technical Interviews

YOUTUBE 7UlslIXHNsw Part 1, Coding. Youtube

Timing: 3-6 months

Self Assessment

Try out some interview questions and see if you can solve them optimally in under 30-40 minutes. If you can do this then you’re in a good spot and you can wrap it quickly. If you get completely stuck, then you need longer.

Setup an interview with a company you don’t mind getting rejected by. Assess your entire interview performance this time and allocate prep appropriately.

Do mock interviews and see how you go. Make sure the interviewer knows how to evaluate candidates and can provide actionable feedback. interviewing.io is a good resource. Website

Brush Up on Data Structures and Algorithms

This doesn’t matter if you’re a seasoned engineer, you need to bush up. How long this takes and what resources you use depends on lots of inputs. Pick ones that fit your needs.

While reviewing topics, do 1-2 questions from Leetcode or the Dojo to get an understanding on how these questions may show up in an interview. LeetCode Dojo (private)

Create a Consistent System to Track Progress

Track progress in the Dojo private .

Suggested to use LeetCode or AlgoExpert.

AgloExpert has already curated questions for interviews.

For LeetCode, use problems tagged with common data structures and grab the top questions with answers in easy, medium and hard categories. You should have ~100 questions, 40 easy, 40 medium, 20 hard for a starting point.

Recommended data structures: - Arrays - Hash Maps - Trees - Stacks - Binary Search Trees - Strings - Linked Lists - Graphs - Queues - Heaps

If you want to work at particular companies, find problems that are specific to those companies and add them too.

Tracking your progress consistently means constant work. Always practice without distraction and time yourself. Be able to solve every problem under 30 minutes. Look at the solution, learn the technique and move on.

Try to build up endurance to be able to solve 5 questions back-to-back.

You now need a scoring system. Evaluate yourself 1-5 based in each category and use it to sort problems that you need more exposure to.

Scoring Rubric 1. Did you need hints? 2. Did you finish in less than 30 minutes? 3. Was your solution optimal? 4. Where there bugs in your solution?

Practice Problems using Spaced Repetition

Spaced Repetition should build your problem solving intuition and muscle memory.

Pattern Recognition should help you notice patterns that you come across while practicing problems.

See Meta-cognition for notes about Spaced Repetition

Recognise common problem-solving patterns

See Katrina Owen's talk on Cultivating Instinct.

This step is the hardest to master, but pattern recognition should enable to you to know when to use certain data structures or algorithms to solve a problem. You’ve also got tips and tricks.

Look at problems on your repeat list and assign them to these techniques. Look at ones with low scores, some combinations are more problematic than others.

For the most problematic ones, filter those on leetcode and add another 50 or so for those to improve your performance.

Your speed and endurance should increase. After 2 rounds you should feel much more confident.

Evaluate readiness

How do you know you’re ready? If you’ve gone through at least 2 rounds and most scores are close to 5. If you get oddball questions, don’t worry too much about them. There will always be a few of these.

You can also use gut feeling. Nobody has unlimited time, so just cut it.

Metacognition

You can’t get every job, but do track what you applied to in your Job Pipeline.

What good things should be repeated next time?

Did anything get you stuck?

Did you get a hint that you didn’t notice?

Did you forget to ask clarifying questions?

Did you jump to conclusions too quickly?

Did you forget edge cases?

Was the problem too complex and needed more work?

Part 2

YOUTUBE 9N2S3JZffeg Part 2, System Design. Youtube

This should take you 1 year or more to prepare for this style of interview. 6 months to read and acquire knowledge, and 6 months to practice strategy.

System design interviews are designed to test your design and architecture acumen. They're vague and subjective: there is no right solution, it's just a discussion between 2+ engineers about tradeoffs.

Read books, blogs, and articles and make sure you keep engaged. This will set you up for success in the long term.

Book Recommendations

Ejsmont, Artur. Web Scalability for Startup Engineers. McGraw Hill, 2015.

If you are Mid - Senior level, then read these too:

Kleppmann, Martin. Designing Data-Intensive Applications. O'Reilly Media, 2017.

Newman, Sam. Building Microservices. O'Reilly, 2021.

Interview Structure

Understand the game plan. The goal isn't to see if you can figure out how to "Design Facebook" in 45 minutes, can you attack a problem to break it down and draw from your own knowledge. This should be a reasonable "starting point".

4 key sections of this interview are:

5 mins: Functional Requirements

Functional requirements are around simplifying the problem. Finding what is important and being able to focus on that part of the problem is important so you can best use the time.

Creating API signatures would help make these examples more concrete.

5 mins: Non-functional requirements

Identify the constraints, come up with traffic and usage assumptions. How many users? Geographically distributed? Activity patterns? What is a typical activity?

Storage requirements can be discerned from this. What's the percentage of active users? Are there peaks? For instance, try to gather Read and write query per second.

Typical user activity could be scrolling feeds for 3 minutes.

Estimate reasonably without getting lost.

15 mins: High-level design and key challenges

Recognise and understand main components needed to complete this design. Block diagrams would help. Pick out core tech that you'll go with, replication and redundancy. Would rate limiting be required? What kind of bucketing or window would be appropriate?

What makes this problem challenging? Throughput? Bandwidth? Latency? Consistency? Fanout problem? Anything else? Would you use hybrid models? Are there data hotspots?

Identify these challenges to know how you'd evolve your design into more detail.

15 mins: Deep dive

Deep dive into one of your high level components. Play to your strengths, if you're good at Data Stores then go into details about hotspots. For message queues then talk about how async plays into your design. Middleware? Feed API fetching, pagination, data compression etc. Mobile engineer, battery life and low end systems for 3rd world countries.

Draw from your past experiences to drive the conversations in the direction you want.

Interview Question Catalogue

Start cataloguing all the types of systems you might be asked to design. There are only a limited set of categories that most systems fall under.

If you know how to design facebook, you can do twitter, linkedin etc.

Itsav has built a Catalogue if you want to use this to build up your own. These should be good for practice. Notion

Practice Individual Sections

Go through your catalogue and follow only section one for each of the structures.

Don't go further than Functional Requirements, and verify these by going to those websites and seeing if you were right.

Don't worry about timing, you can take an hour per category per section. Your speed will improve to the 5 minute target as you practice more.

Do the same with non functional requirements. Repeat for the 3rd section, then the 4th question. These repetitions should speed you up.

Identify and Invest

Identify and invest in your strengths and interests.

You'll find yourself comfortable in a particular component of your design. Now polish this. If that's the data layer, make sure you know more than one technology. e.g. Both SQL and NoSQL. Understand the different data storage options and how they compare to each other.

When would you use Kasandra vs Dynamo vs Bigtable?

Are they similar? If so, how?

Get to know things in depth. How does Kasandra's Gossip protocol work? What does the murmur 3 algorithm do? How are previous and next successors stored in each node that needs to be taken offline? What are tombstones? How does the write log work?

Build your in depth knowledge in this area.

Build Systems E2E

The problem with just studying is you talk in generic terms. However, people who have really worked on those systems will use real examples. They'll mention actual technologies they've used like Nginx for LB or reverse proxy, databases, caching etc.

Timed Practice

Around 10-11th months in, pick 10-15 questions from the categories and practice under a real timed setting.

Complete each section within the suggested time and complete the entire design in under 40 minutes.

Part 3

YOUTUBE sv-3crA1img Part 3, Behavioural. Youtube

These are a way to assess your culture fit. That's a win for you and the company. It's also about how you'd push the company culture forward.

Sometimes this is built into other interviews, but some companies keep these as a single focused interview.

7 key areas

Communication - Can you communicate well to technical and non technical people. What about frustrated customers? What about your PM?

Collaboration - You need to care about other people, their well-being and success. Being someone who enables that for others.

Drive - Some difficult projects break you down. If the going gets tough, do you step up and encourage others?

Decision making and maturity - Can you make good decisions with a bias towards quality? Can you balance the best product vs what's best for the team? Do you focus on important decisions or get stuck in details?

Passion - Shows that you go the extra mile when you work on something that excites you.

Empathy and Inclusiveness - You need to understand where other people are coming from and how they form their opinions. This means respect everyone and advocate for equality.

Leadership - Managers have authority to lead, but without the role it's more important because you need to convince others such that they respect your decisions.

Resources

Your Resume. Stories and anecdotes from your experience. See also How to Write a Great Software Engineer Resume.

There is no way to teach how to tell people about your experiences. Try to figure out your passions. Find resources to help you based on those 7 key areas above.

Strategy

1. Review your resume and create detailed stories around your experiences.

2. Align your stories to the Star method.

That's it. Reflect on it like a retrospective, on each experience figure out what the goals were. What went well? What didn't go well?

Was there bias towards faster delivery?

Was there technical or operational issues? How did you overcome them?

Use the STAR method. Situation, Task, Action, Result.

Utsava has created a set of Behavioural Questions that he's shared that would be good to practice with. Notion

Make sure you be honest, and be yourself.

Sharing failures aren't weaknesses. Knowing someone has failed and learned and levelled up is more interesting. Weaknesses are what makes us human.

Make sure you focus on what you did, keep it specific to what you contributed.