Tl;dr -> Scroll to the bottom and read the summary.
In case your wondering, off the bat, exactly what this article will be about, it is simply a note to my past self, my self 6-months ago. You see, 6-months ago is about when I began looking for my very first software engineering role. My biggest struggle then was the balance between gaining knowledge (algorithms and data structures) and professional networking (applications and reach outs).
This still is my biggest struggle, though, for a completely different reason (I am, as I write this, still in that search).
So, here it is, everything I wish I would have done every weekday (everyone needs a break so take a day or two to walk away and let your mind wander. Avoid burnout by not thinking about the same things for too long).
Really, a good day would consist of 3 things:
- Algorithm and data structure practice.
- Commit to a project.
- Apply to jobs and network toward those applications.
In today’s job market, there is a saturation of entry-level software engineering professionals looking for their first roles. While the demand from companies for software engineering positions is greater, the sudden influx of applicants from all over the world has created a logistical bottleneck for most of those companies. And also, not all those roles they were seeking were for entry-level positions, but rather an across-the-board range of experiences. This was further made complicated by the sudden shift to remote. Surely there are more intricacies to that story but these sudden changes were ultimately brought about by the worldwide COVID-19 (Rona) pandemic.
Things are already starting to get better as both Rona relief is rolled out and companies overcome those logistical bottlenecks. The strategy for the next few months, at least, is the same. Get as many applications and follow-ups done as possible. I will touch on this again at the end of this article but of those three things, we should dedicate a majority of our time to networking and getting your application to the top of the pile. All other steps of the hiring process ultimately follow behind getting noticed.
Algorithms and Data Structures
This is the stuff I love. If I could spend all day studying algorithms I would. I know some people dread this process but this is my favorite part of it. And initially, this would take up the majority of my day. Here’s what I learned so far about the relevance of algorithms and data structures in my job search.
Studying code patterns is important for multiple reasons.
- They are code patterns, the most complex problems you will ever have to solve are a variation of a popular code pattern. I doubt you’ll run into a scenario identical to a Leetcode problem you had but I can guarantee that you’ll be glad to notice the similarities.
- They do a great job of molding your thought processes to logically and programmatically think about problems. The programmatically part of that is important and by that, I mean being able to step out a solution similar to how your computer’s processor or debugger is computing it (i.e. this code is evaluated, then the for loop is executed. Such and such happens each time through loop until a condition is met which results in…).
- The inherent purpose of learning specific common algorithms is ultimately tied to the concept of ‘BigO’ notation. How fast would it take for an average computer to compute the return to your function if it was passed an array that had a million indices? How much space would your function require while it is being executed? This isn’t absurd at all if you are working for any ‘Big Tech’ company or financial institution where transactions could far exceed that number.
LeetCode is by far the most popular. It is free, hosts contests, and most problems will have multiple solutions in many different languages from other users. It also keeps track of your activity which could be convenient if you wanted to show it off.
HackerRank, in my experience, seems to be the preferred platform for code challenges. As such, it seems to be more geared towards companies looking to hire than strictly users trying to get hired. Having said that, it is free and it’s a good idea to get familiar with that environment.
AlgoExpert is a paid service created by Clement Mihailescu, who comes out with awesome videos on the topic of coding interviews and finding a job. AlgoExpert is also what I use and the benefit I find in it is that each problem comes with multiple solutions, in multiple languages, has hints for each problem, and an accompanying video which, if nothing else, serves as a great example of what to emulate when you go to explain your solutions in an actual technical interview.
And this process isn’t limited to simply studying the coding patterns but being able to understand them well enough to be able to programmatically explain them to someone who has never seen them before. To this end, mock interviews fit well into this practice. There are several ways to do this beyond asking people with similar goals you met at a meetup or something. There are resources like AlgoExpert, Pramp, and Skilled. I’ll go over each but just know the best resource of all is an actual technical interview. Even if you are completely lost, you’ll gain the experience of spending a block of time learning from the person you hope to one day be like.
AlgoExpert again, yes, what you are paying for here is a place with all the resources you need for a technical interview in one place. Each piece can be found free across separate resources (i.e. LeetCode + YouTube + Pramp) but there is an inherent time cost that comes from transitioning between each resource.
Pramp is a free resource specifically to help people seeking a career in tech practice interviews and covers algorithms, behavioral topics, system design, and data science among other topics.
Skilled is a resource where you pay to schedule a technical interview on the topic of your choice with an industry professional. I feel the application for this sort of service is relatively niche simply because, by the time you are actually ready to start practicing technical interviews, beyond interviewing with other job seekers and friends, you should be actually going on technical interviews.
All in all, I’d recommend spending 1–2 hours a day on algorithm and data structure practice. Something like 30min on actually solving a problem. If you weren’t able to solve the problem in 30min, give yourself another 30min to solve it but this time allow yourself to use Google. Then, whether you were able to solve the problem or not, review your answer or another answer for 30min, walking through the solution programmatically, and thinking about the ‘BigO’ notation.
Commit to a Project
I find it funny that when you contribute to a project, yours or otherwise (but especially yours) it’s called a “commit” because that implies a commitment to that project, and committing to just one project for the long haul has been a huge struggle for me. There is so much self-doubt that comes along with creating a project from your imagination to something hosted that anybody can interact with. Even tutorials, I find myself asking myself if 4-hours of my time to follow along with a tutorial is worth it when I can be applying to jobs and reaching out to recruiters instead.
Here’s the hindsight, every time when talking about a project I am proud of comes up I regret not having fully committed to a project I would want the whole world to see.
So whether you want to create a portfolio, contribute to an open-source project, create your own version of a project you watched a tutorial on, or just dive into an idea you had and figure it out as you go, COMMIT to it.
At the end of the day, we are creators, and when, for one reason or another, we are being prevented from creating, it eats at us. So, for that reason alone, I would say it’s worth dedicating some time each day to this purpose.
Once you’ve decided on the project you want to spend your time with I recommend committing to it once a day. And when should you commit? Well, I wrote an article on it, you can read it here. If you are really feeling like it though and have the time, it’d be totally okay to spend an hour or two working on a feature each day.
Apply to a Job and Network Toward that Application
This has been the hardest part for me. When you first begin, the challenge is so existential. You suddenly have to answer tough questions like:
- “Would I be willing to relocate out of the country?”
- “Would I be willing to relocate within my country?”
- “What does relocating look like?”
- “Do I have relatives where I’m going?”
- “How do I get an apartment with a job but no money?”
- “What industry would I be ok working in? (Fintech, FitTech, EdTech, etc.)”
- “I don’t match with anything on the job description of any jobs posted on LinkedIn at any given time, so which jobs am I ok with applying to? (This is a running joke in the tech industry. Skip the job description and apply to all of them. It’s not your job to shoot yourself down, it’s theirs. Your job is to get a job).
Here’s the truth, the best experience you will get is interview experience. No one will ask you about the design decisions of one of your projects, give you a code challenge, invite you to a technical or behavioral interview, or send you an offer if you don’t apply. And when you apply, you still need some way of standing out to get your application noticed and that is done through networking. Everything is for naught if nobody even notices.
So the first priority is to make everything else mentioned above relevant by getting noticed by a company through applying and networking.
So what does this look like? Well, you can hop on any job board like LinkedIn, Indeed, BuiltInNYC, and start applying to any positions you are even mildly interested in (you may want to know more about the job and that’s good because, in an interview, it’s just as much about you learning about the role as it is the company learning about you).
I’m not going to go into detail about what your resume or cover letter should look like, or your social media for that matter. I will say that a good way to find out is to find someone in the industry active on that platform and use their profile as a template. Some applications will allow you to upload your resume and it will automatically fill out parts of the application for you. This is a good way to test how well your resume is formatted. And I recommend your cover letter contain something unique to the company you are applying for and how you’ll contribute to that uniqueness.
After you submit the application, go to LinkedIn, find the company you applied to, switch to the tab containing the people from that company that have a LinkedIn account, and search that page for recruiters. You can find more about that process in another article I wrote here.
After you find the recruiter you want to target you can use a tool like Skrapp to get that person’s email.
Again, not going to go into too much detail about what that email would look like but it should be a brief email that introduces yourself (link to your LinkedIn), why your emailing them (the specific role you applied to with a link to that role), and work you’ve done relevant to the role you applied to (link to GitHub repos, hosted sites). Then attach your cover letter and resume so they don’t have to go searching for your application in their own systems if they don’t want to.
That’s it, apply then email.
So how many is enough? I think 300 is a fair amount of applications to send out. Oh, you meant a day, eh, I think 4 a day is good. That is 4 applications and relevant recruiter emails a day.
To summarize, if I could have someone tell me exactly what to do when I first started on the job search it would be to work on algorithms for 1–2 hours a day, land 1 commit, or spend one hour a day on one project until that project is ultimately done, and then send out 4 job applications and follow up with each application each day.
If you don’t have time to do that I would prioritize the applications over everything else because without those nothing else happens. I wrote an article on increasing your productivity through creating tasks, planning those tasks, and then timing those tasks.
If you have more time, do what you love… Or take a break. Breaks are a long-term investment into your mental health. Trust me.
Good Luck (and feel free to reach out if you want to talk about it)