Luck is what happens when preparation meets opportunity - Seneca

I have been there, went to several interview workshops, attended every career fairs available, and reached out to any possible leads on LinkedIn... Only to get rejected or worse, ghosted by companies that only spent a couple hours at best to talk to you. So how to avoid all of this?

The short answer: it is highly likely that you can't. The truth is, there are so many factors that comes into play, some that you can control while some you can't.

Before going into the part that we can control, I wanted to assure first that whether or not you land an offer with a company, no matter the size, should not define neither who you are nor your capability (and also shame on people using that to judge someone else). You are always more than just couple hours of Q&A, coding challenges and behavior interviews. What important is to not let it drag you down and continue to push forward and optimize on learnings.

Now onto the purpose of this post: How can we best prepare ourselves to get a tech job?

I was quite fortunate to have worked in various environments in tech, from a start-up, to a tech incubator at a non-tech company, to a large scale project at tech focused one. I also have the opportunity to be on the other side of the table as an interviewer, which gives me the point of view from both side. Depends on the size and depth, companies obviously have different criteria and requirements. However, after all that, they just try to get a single answer from you: Can you fit with the team culture and contribute to the success of the company in your own unique way?

For me personally, while there are aspects of interviews that you can prepare in the short term, we should think about this for a longer term. In modern tech profession, software roles required much more than just individual contributions, with a lot of collaboration with your team and your manager. It is a make or break difference on forming a comfortable work environment for you, especially during crunch time or high velocity work. Knowing what environment that can allow you to grow is the real key to landing your software dream job.

So how can you figure out what environment that best suited for you? Ultimately, it's up to you to decide what's that look like. There are so many layered dimensions that crossing between the company and you. Even a flexible environment where fluid at one point and rigid at another could also be your preferences. As a person, I think it's impossible to have a perfect way to evaluate this consistently across everyone. As an engineer however, impossible (and impractical) have never stopped me from trying to make sense of things. For me personally, there are two things that help me shape what is my ideal professional team look like:

For methodological people, here is a table that can help you evaluate

Employer's Environment Evaluatore (E3) for Company X

Once you figured out the environment you want to be in, the rest is building a case to emphasize on that, focusing on those shared value in that environment. In my mental model, here is what it looks like:

  1. Step 0: Learn and gather experience that you think is important. Build random things, research, make connections
  2. Step 1: Build your stories. What traits you want to highlights and what evidence to support it? Generally 6-7 examples to cover all of you traits (recommend to follow STAR method)
  3. Step 2: Craft your resume. Remember to fit it into the role or environment that you want and make sure to prioritize your experience/background
  4. Step 3: Apply for jobs. It's a number game: the more you apply the higher chance it will move forward. Be proactive
  5. Step 4: Organize your skills and background. Don't try to do as many leet code as possible. Do a few but go deep in understanding the algorithm/data structure yourself.
  6. Step 5: Interview: be yourself, show your passion. Solve problems with your interviewers not for your interviewers
  7. Step 6: Retrospect: learn and improve from failed interviews. Never stop gaining experience and continue to move forward